这个问题很难吗?重新再问一次,怎么获取匿名类型的值

everyday2009 2009-12-23 10:06:21
原先的问题见:
http://topic.csdn.net/u/20091223/09/5ab6f23d-8a3f-43f2-9d6e-e98771f47fa5.html?51274

vs2008
代码如下,怎么获取它的值呢??


public object Get()
{
int a = 10, b = 20;
return new { a = a, b = b };
}



...全文
101 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2009-12-23
  • 打赏
  • 举报
回复

匿名类型是有作用域的
[Quote=引用 MSDN:]

匿名类型具有方法范围。若要向方法边界外部传递一个匿名类型或一个包含匿名类型的集合,必须首先将匿名类型强制转换为对象。但是,这会使匿名类型的强类型化无效。如果必须存储查询结果或者必须将查询结果传递到方法边界外部,请考虑使用普通的命名结构或类而不是匿名类型。
[/Quote]

这种做法 msdn已经说的很明白了,强类型化无效,这种情况还真的使用6楼的反射
游北亮 2009-12-23
  • 打赏
  • 举报
回复
嗯,升级到08吧,在08下,这些特性也能在FrameWork2.0下使用,很方便
像实体类原来要写多少代码,现在每个属性一行就够了,呵呵。

还没说别的功能增强
everyday2009 2009-12-23
  • 打赏
  • 举报
回复
谢谢!
满衣兄 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 youbl 的回复:]
你是用vs2005开发吧?
楼主写的是vs2008新增的特性,匿名类型
还有属性简写,比如原来要:
private string a;
public string A{get{return a;}set{a=value;}}
现在可以直接一行:
public string A{get;set;}


引用 1 楼 yfqvip 的回复:
这么写根本就是错的嘛,难道你的编译器不报错?
C# codenamespace WindowsApplication12
{publicpartialclass Form1 : Form
    {public Form1()
        {
            InitializeComponent();
        }publicobject Get()
        {int a=10, b=20;returnnew { a= a, b= b };
        }
    }
}

[/Quote]
恩,我说呢,咋就有问题了,学习了。
游北亮 2009-12-23
  • 打赏
  • 举报
回复
你是用vs2005开发吧?
楼主写的是vs2008新增的特性,匿名类型
还有属性简写,比如原来要:
private string a;
public string A{get{return a;}set{a=value;}}
现在可以直接一行:
public string A{get;set;}


[Quote=引用 1 楼 yfqvip 的回复:]
这么写根本就是错的嘛,难道你的编译器不报错?
C# codenamespace WindowsApplication12
{publicpartialclass Form1 : Form
{public Form1()
{
InitializeComponent();
}publicobject Get()
{int a=10, b=20;returnnew { a= a, b= b };
}
}
}
[/Quote]
游北亮 2009-12-23
  • 打赏
  • 举报
回复
通过反射就可以了
        protected void Page_Load(object sender, EventArgs e)
{
var a = Get();
Response.Write(GetValue(a, "a", true));
Response.End();
}
public object Get()
{
int a = 10, b = 20;
return new { a = a, b = b };
}
public static object GetValue(object obj, string propertyName, bool IgnoreCase)
{
object l_ret;

BindingFlags flags =
BindingFlags.GetProperty |
BindingFlags.Public |
BindingFlags.Instance;
if (IgnoreCase)
flags |= BindingFlags.IgnoreCase;

PropertyInfo info =
obj.GetType().GetProperty(propertyName,flags);
//BindingFlags.IgnoreCase |
//PropertyInfo info = obj.GetType().GetProperty(propertyName, BindingFlags.);
//object l_tmp = obj.GetType().InvokeMember(propertyName, BindingFlags.GetProperty, null, obj, null);
if (info != null)
{
l_ret = info.GetValue(obj, null);
}
else
{
l_ret = null;
}
return l_ret;
}

zhulong1111 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 everyday2009 的回复:]
原先的问题见:
http://topic.csdn.net/u/20091223/09/5ab6f23d-8a3f-43f2-9d6e-e98771f47fa5.html?51274

vs2008
代码如下,怎么获取它的值呢??

C# codepublicobject Get()
{int a=10, b=20;returnnew { a= a, b= b };
}


[/Quote]return 要是个类型撒 把它弄到数组或者泛型什么的
满衣兄 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiedu414 的回复:]
多看看面相对象吧,这个就不解释了。
[/Quote]
额。。。还是解释一下吧,我也不知道应该怎么用,学习一下。
Lovely_baby 2009-12-23
  • 打赏
  • 举报
回复
List<object> keyval = Get();

string[] str=new string [keyval.Count];
int i = 0;
foreach (object s in keyval)
{
str[i++] = s.ToString();
}
xiedu414 2009-12-23
  • 打赏
  • 举报
回复
多看看面相对象吧,这个就不解释了。
满衣兄 2009-12-23
  • 打赏
  • 举报
回复
这么写根本就是错的嘛,难道你的编译器不报错?

namespace WindowsApplication12
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public object Get()
{
int a = 10, b = 20;
return new { a = a, b = b };
}
}
}

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧