Ste*_*ald 24 .net c# reflection properties
我想在ASP.Net应用程序中的回发之间保留一个属性.目前这样做:
public int MyIndex
{
get
{
return (int)Session[ToString() + "MyIndex"];
}
}
Run Code Online (Sandbox Code Playgroud)
但更喜欢这样的东西:
public int MyIndex
{
get
{
return (int)Session[ToString() + #code_that_returns_property_name#];
}
}
Run Code Online (Sandbox Code Playgroud)
Setter省略了,但它只是使用相同的字符串将值推送到Session中.有没有办法使用反射,或更好的解决方案?
sis*_*sve 23
public static int Dummy {
get {
var propertyName = MethodBase.GetCurrentMethod().Name.Substring(4);
Console.WriteLine(propertyName);
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ice 14
使用CallerMemberName要快得多,并且可以轻松复制和粘贴其他属性.
private static object GetSessionValue([CallerMemberName]string propertyName = "")
{
return Session[propertyName];
}
private static void SetSessionValue(object value, [CallerMemberName]string propertyName = "")
{
Session[propertyName] = value;
}
public int MyIndex
{
get { return (int)GetSessionValue(); }
set { SetSessionValue(value); }
}
Run Code Online (Sandbox Code Playgroud)
And*_*are 12
不,没有一种简单的方法可以做你想做的事.我认为你已经编写的代码要好得多.
编辑: 这个答案收到了不少赞成票,我明白为什么.虽然可以做OP想要做的事情,但也许我们应该停下来思考是否这样做是可取的.用Ian Malcom博士的不朽言辞来解释,仅仅因为你能做某事并不意味着你应该这样做.
您可以使用MethodInfo.GetCurrentMethod().Name返回当前方法的名称:
public int MyIndex
{
get
{
return (int)Session[ToString() + MethodInfo.GetCurrentMethod().Name];
}
}
Run Code Online (Sandbox Code Playgroud)
由于属性是作为引擎下的方法实现的,因此将返回名称"get_MyIndex".如果你不想要"get_"部分,你可以将几个字符子串:
public int MyIndex
{
get
{
return (int)Session[ToString() + MethodInfo.GetCurrentMethod().Name.Substring(4)];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9366 次 |
| 最近记录: |