在C#3.0中,您可以使用以下语法创建匿名类
var o1 = new { Id = 1, Name = "Foo" };
Run Code Online (Sandbox Code Playgroud)
有没有办法动态地创建这些匿名类到变量?
例:
var o1 = new { Id = 1, Name = "Foo" };
var o2 = new { SQ = 2, Birth = DateTime.Now };
Run Code Online (Sandbox Code Playgroud)
动态创建示例:
var o1 = DynamicNewAnonymous(new NameValuePair("Id", 1), new NameValuePair("Name", "Foo"));
var o2 = DynamicNewAnonymous(new NameValuePair("SQ", 2), new NameValuePair("Birth",
DateTime.Now));
Run Code Online (Sandbox Code Playgroud)
因为我需要这样做:
dynamic o1 = new ExpandObject();
o1."ID" = 1; <--"ID" is dynamic name
o1."Name" = "Foo"; <--"Name" is dynamic name
Run Code Online (Sandbox Code Playgroud)
和Scene1:
void …
Run Code Online (Sandbox Code Playgroud) 在C#3.0中,您可以使用Expression创建一个具有以下语法的类:
var exp = Expression.New(typeof(MyClass));
var lambda = LambdaExpression.Lambda(exp);
object myObj = lambda.Compile().DynamicInvoke();
Run Code Online (Sandbox Code Playgroud)
但是如何使用Expression创建Anonymous类?
//anonymousType = typeof(new{ Name="abc", Num=123});
Type anonymousType = Expression.NewAnonymousType??? <--How to do ?
var exp = Expression.New(anonymousType);
var lambda = LambdaExpression.Lambda(exp);
object myObj = lambda.Compile().DynamicInvoke();
Run Code Online (Sandbox Code Playgroud) 如何将lua函数块转储到字符串?
function test(a, b)
local c = a + b
return c
end
print( type(test) ) --> function
print( test ) --> function: 0053B108
print( dumpToString(test) )
Run Code Online (Sandbox Code Playgroud)
我希望dumpToString结果如下:
function test(a, b)
local c = a + b
return c
end
Run Code Online (Sandbox Code Playgroud)
这该怎么做 ?
=== update1 ===
我想自动记录并注入代码.
class MyClass1
{
public:
MyClass1()
{
init();
}
virtual void init()
{
printf("MyClass1 init");
}
}
class MyClass2 : public MyClass1
{
public:
virtual void init()
{
printf("MyClass2 init");
}
}
int main()
{
MyClass2 *obj = new MyClass2();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的结果
"MyClass2 init"
Run Code Online (Sandbox Code Playgroud)
但它实际上显示了消息
"MyClass1 init"
Run Code Online (Sandbox Code Playgroud)
如何从基类构造函数调用派生类虚方法?
===更新1 ===
class MyClass1
{
public:
MyClass1()
{
init();
}
virtual void init()
{
printf("MyClass1 init");
}
}
class MyClass2 : public MyClass1
{
public:
MyClass2()
: MyClass1()
{
}
virtual …
Run Code Online (Sandbox Code Playgroud)