Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何定义匿名类型?_.net_Asp.net Mvc 3_C# 4.0_Anonymous Types - Fatal编程技术网

.net 如何定义匿名类型?

.net 如何定义匿名类型?,.net,asp.net-mvc-3,c#-4.0,anonymous-types,.net,Asp.net Mvc 3,C# 4.0,Anonymous Types,我有这样填充的匿名类型变量(我有两个变量jsonDataCache和jsonData,但我只想有一个,jsonData): 但如果我想先定义这个变量,在填充之前,基本上我想这样做: var jsonData = null; //check if jsonData in cache and if it is return Json(jsonData, JsonRequestBehavior.AllowGet); jsonData = new {

我有这样填充的匿名类型变量(我有两个变量
jsonDataCache
jsonData
,但我只想有一个,
jsonData
):

但如果我想先定义这个变量,在填充之前,基本上我想这样做:

var jsonData = null;   

//check if jsonData in cache and if it is return Json(jsonData, JsonRequestBehavior.AllowGet);

jsonData = new
                {
                    total = totalPages,
                    page = page,
                    records = totalRecords,

                    rows = (from b in myData
                    select new
                            {
                            //do things
                            }).ToArray()
                 };
//put jsonData in cache by key

return Json(jsonData, JsonRequestBehavior.AllowGet);
我怎么能这么做

我之所以这样做是因为我想引入缓存,所以我需要首先定义变量,然后在缓存中检查它,如果不是,我将执行上面的操作。 目前我用两个变量来实现,我只想用一个变量

以下是我目前的做法:

public virtual JsonResult GetSomething(int id, int type)
{
   string keyPrefix = GetKeyPrefix(id, type);

   var jsonDataCache = CacheManager.Get<object>(keyPrefix);   

    if(jsonDataCache != null)
      return Json(jsonDataCache, JsonRequestBehavior.AllowGet);

    var myData = GetFromDataase();

    var jsonData = new
                    {
                        total = totalPages,
                        page = page,
                        records = totalRecords,

                        rows = (from b in myData
                        select new
                                {
                                //do things
                                }).ToArray()
                     };

    CacheManager.Set<object>(keyPrefix, jsonData);

    return Json(jsonData, JsonRequestBehavior.AllowGet);
}
公共虚拟JsonResult GetSomething(int-id,int-type) { 字符串keyPrefix=GetKeyPrefix(id,type); var jsonDataCache=CacheManager.Get(keyPrefix); if(jsonDataCache!=null) 返回Json(jsonDataCache,JsonRequestBehavior.AllowGet); var myData=GetFromDataase(); var jsonData=new { 总计=总页数, 第页, 记录=总记录, 行=(来自myData中的b) 选择新的 { //做事 }).ToArray() }; Set(keyPrefix,jsonData); 返回Json(jsonData、JsonRequestBehavior.AllowGet); } 更新: 在你们的帮助下,我认为应该是这样,希望这是正确的方向:

public virtual JsonResult GetSomething(int id, int type)
{
   string keyPrefix = GetKeyPrefix(id, type);

   var jsonData = CacheManager.Get<object>(keyPrefix);   

    if(jsonData != null)
      return Json(jsonData , JsonRequestBehavior.AllowGet);

    var myData = GetFromDataase();

    jsonData = new
                    {
                        total = totalPages,
                        page = page,
                        records = totalRecords,

                        rows = (from b in myData
                        select new
                                {
                                //do things
                                }).ToArray()
                     };

    CacheManager.Set<object>(keyPrefix, jsonData);

    return Json(jsonData, JsonRequestBehavior.AllowGet);
}               
公共虚拟JsonResult GetSomething(int-id,int-type) { 字符串keyPrefix=GetKeyPrefix(id,type); var jsonData=CacheManager.Get(keyPrefix); if(jsonData!=null) 返回Json(jsonData、JsonRequestBehavior.AllowGet); var myData=GetFromDataase(); jsonData=新 { 总计=总页数, 第页, 记录=总记录, 行=(来自myData中的b) 选择新的 { //做事 }).ToArray() }; Set(keyPrefix,jsonData); 返回Json(jsonData、JsonRequestBehavior.AllowGet); } 好吧,您可以“通过示例”创建它——使用相同的属性名称和类型,以相同的顺序,仅使用伪值。例如:

var jsonData = new { total = 0, page = 0, records = 0,
                     rows = new[] { new { dummy = "" } };
不清楚您希望嵌套匿名类型做什么,所以我只创建了一个名为
dummy
的字符串属性

请注意,我会尽量避免正常地做这种事情。。。正如马克所说,如果你能解释更大的图景,它将帮助我们帮助你更多

编辑:如果是为了缓存,那么您希望如何以静态类型的方式创建声明缓存?您声明接受的Json方法是什么?如果声明接受
对象
,则不需要强类型变量,对吗?如果它是泛型的,那很好——但它将回到如何适当地强制转换缓存中的任何内容…

好吧,您可以“通过示例”创建它——使用相同的属性名称和类型,以相同的顺序,仅使用伪值。例如:

var jsonData = new { total = 0, page = 0, records = 0,
                     rows = new[] { new { dummy = "" } };
不清楚您希望嵌套匿名类型做什么,所以我只创建了一个名为
dummy
的字符串属性

请注意,我会尽量避免正常地做这种事情。。。正如马克所说,如果你能解释更大的图景,它将帮助我们帮助你更多


编辑:如果是为了缓存,那么您希望如何以静态类型的方式创建声明缓存?您声明接受的Json方法是什么?如果声明接受
对象
,则不需要强类型变量,对吗?如果它是通用的,那很好-但它将返回到如何适当地强制转换缓存中的任何内容…

不清楚为什么要这样做,但这里有一种方法:

您可以将对象创建为类型
对象
动态

object foo = null;

foo = new {
 bar = "bar"
};
更新:

鉴于你的更新,我认为有一个更合适的方法来做到这一点

就我个人而言,我使用
System.Web.Caching.Cache
,并且有一个扩展方法来检查缓存中的项目(基于缓存键),或者执行您的方法来检索数据

public static T GetOrStore<T>(this Cache cache, string key, Func<T> generator)
        {
            var result = cache.Get(key);
            if(result == null)
            {
                result = generator();
                cache.Insert(key,result);
            }

            return (T) result;
        }
其中:

private static string Foo()
{
   return new {[...]}
}

不清楚您为什么要这样做,但有一种方法:

您可以将对象创建为类型
对象
动态

object foo = null;

foo = new {
 bar = "bar"
};
更新:

鉴于你的更新,我认为有一个更合适的方法来做到这一点

就我个人而言,我使用
System.Web.Caching.Cache
,并且有一个扩展方法来检查缓存中的项目(基于缓存键),或者执行您的方法来检索数据

public static T GetOrStore<T>(this Cache cache, string key, Func<T> generator)
        {
            var result = cache.Get(key);
            if(result == null)
            {
                result = generator();
                cache.Insert(key,result);
            }

            return (T) result;
        }
其中:

private static string Foo()
{
   return new {[...]}
}
你不能这样做(并初始化为null),除了一些使用泛型方法的非常讨厌和丑陋的“举例”策略。匿名类型的变量只能在初始化时声明(泛型类型参数除外)

然而,你似乎不太可能真的需要它。的确

object jsonData;
这就足够了,因为您从未使用该值。除此之外,我认为是时候引入DTO类了。

你不能这样做(并初始化为null),除了一些非常讨厌的、丑陋的、带有泛型方法的“通过示例”策略。匿名类型的变量只能在初始化时声明(泛型类型参数除外)

然而,你似乎不太可能真的需要它。的确

object jsonData;
这就足够了,因为您从未使用该值。除此之外,我认为是时候引入DTO类了。

为什么