我有一个带参数的扩展方法。在扩展方法中,我希望能够访问传入的对象的名称。
static MyObject Add<T>(this MyObject myObj, T value) {
// MyObject is dictionary<string, object> for simple example
myObj.Add(nameof(value), value);
return myObj;
}
void run() {
var anotherObject = new AnotherObject() { Name = "Bob" };
var myObject = new MyObject().Add(anotherObject.Field);
}
当执行此操作时,它会放置"value", "Bob"
,而我希望它将"Name", "Bob"
放入字典中。
这可能是使用nameof()
功能还是我需要重新考虑逻辑?我能想出的唯一保留一般想法的是:
static MyObject Add<T>(this MyObject myObj, string name, T value)...
myObject.Add(nameOf(anotherObject.Field), anotherObject.Field);
我不想重复字段定义。
答案 0 :(得分:0)
您可以使用typeof()
访问类型名称static MyObject Add<T>(this MyObject myObj, T value) {
// MyObject is dictionary<string, object> for simple example
myObj.Add(typeof(T).Name, value);
return myObj;
}
答案 1 :(得分:0)
以下示例可以帮助您。
//MyObject class
public class MyObject{
public string Name{get;set;}
}
//AnotherObject class
public class AnotherObject{
public string Name{get;set;}
}
//Method call
void Main()
{
var anotherObject = new AnotherObject() { Name = "Bob" };
var object1 = new MyObject();
var obj = object1.Add<MyObject, AnotherObject>(object1, anotherObject);
//print obj.Name; anywhere.
}
//Extension Method
static class Ext{
public static MyObject Add<K,T>(this MyObject myObj, MyObject myObjOne, T value) {
// MyObject is dictionary<string, object> for simple example
string val = typeof(T).GetProperty("Name").GetValue(value).ToString();
myObjOne.Name = val;
return myObjOne;
}
}