我有以下方法将对象序列化为HTML标记.如果类型不是Anonymous,我只想这样做.
private void MergeTypeDataToTag(object typeData)
{
if (typeData != null)
{
Type elementType = typeData.GetType();
if (/* elementType != AnonymousType */)
{
_tag.Attributes.Add("class", elementType.Name);
}
// do some more stuff
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何实现这一目标吗?
谢谢
有什么可以使用,以确定一个类型是否实际上是一个匿名类型?例如界面等?
目标是创建以下内容......
//defined like...
public static T Get<T>(this IAnonymous obj, string prop) {
return (T)obj.GetType().GetProperty(prop).GetValue(obj, null);
}
//...
//And then used like...
var something = new { name = "John", age = 25 };
int age = something.Get<int>("age");
Run Code Online (Sandbox Code Playgroud)
或者这只是匿名类型的美丽?没有什么可以自我识别,因为它需要一个新的形状?
注意 - 我意识到你可以为对象类编写一个扩展方法,但在我看来,这看起来有点矫枉过正.
在这个例子中:
var p1 = new {Name = "A", Price = 3};
Run Code Online (Sandbox Code Playgroud)
这转化为IL:
class __Anonymous1
{
private string name ;
private int price;
public string Name{ get { return name; } set { name = value ; } }
public int Price{ get { return price; } set { price= value ; } }
}
__Anonymous1 p1 = new __Anonymous1();
p1.Name = "A";
pt.Price =3
Run Code Online (Sandbox Code Playgroud)
根据IL,它是允许的,为什么会这样?它背后的决定是什么?不应该只读?
谢谢
这是我的第一个问题,温柔.
我有一个类使用"yield"返回语句的单个方法.将自动创建嵌套类型.使用设置为绑定标志的反射BindingFlags.DeclaredOnly,我得到这个输出:
//我班上的公共成员
Test.FileSystemObject..ctor
Test.FileSystemObject.GetFiles(DirectoryInfo目录)
Test.FileSystemObject.GetFiles(String path)Run Code Online (Sandbox Code Playgroud)// Auto generated nested class. Test.FileSystemObject+<GetFiles>d__4..ctor Test.FileSystemObject+<GetFiles>d__4.<>3__directory Test.FileSystemObject+<GetFiles>d__4.<>4__this Test.FileSystemObject+<GetFiles>d__4.<directories>5__7 Test.FileSystemObject+<GetFiles>d__4.<files>5__8 Test.FileSystemObject+<GetFiles>d__4.<FSO>5__6 Test.FileSystemObject+<GetFiles>d__4.<i>5__9 Test.FileSystemObject+<GetFiles>d__4.<unprocessed>5__5 Test.FileSystemObject+<GetFiles>d__4.directory
如何确定返回的类型是否assembly.GetTypes(BindingsFlags)是这样的自动生成类型?我正在寻找一种简单的方法来排除这些.