编写强类型的Html助手有一个共同的问题.问题是如何检索属性名称/值对.假设我们有以下Html帮助声明:
public static string DatePickerFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, DateTime?>> expression)
Run Code Online (Sandbox Code Playgroud)
我找到了几种解决方案:1.
var value = expression.Compile()( helper.ViewData.Model );
string name = ExpressionHelper.GetExpressionText( expression );
string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName( name );
Run Code Online (Sandbox Code Playgroud)
2.
ModelMetadata metadata = ModelMetadata.FromLambdaExpression( expression, helper.ViewData );
Object value = metadata.Model;
String name = metadata.PropertyName;
Run Code Online (Sandbox Code Playgroud)
3.仅使用MemberExpression获取成员名称
string GetPropertyName<T>(Expression<Func<T>> property)
{
var propertyInfo = (property.Body as MemberExpression).Member as PropertyInfo;
if (propertyInfo == null)
{
throw new ArgumentException("The lambda expression 'property' should point to a valid Property");
}
return propertyInfo.Name;
}
Run Code Online (Sandbox Code Playgroud)
所有这些都有不同的实现从第一次看(使用Reflector调查),但我没有深入挖掘. …
我需要在C#WinForms中声明方形矩阵,连续超过20000个项目.我读到了32位的2GB .Net对象大小限制以及64位操作系统中的相同情况.所以我理解单一答案 - 使用不安全的代码或使用C++编译器构建的独立库.
对我来说问题是值得的,因为ushort [20000,20000]小于2GB但实际上我甚至无法分配700MB的内存.我的限制是650MB,我不明白为什么 - 我有32位WinXP和3GB内存.我尝试使用Marshal.AllocHGlobal(700 << 20)但它抛出OutOfMemoryException,GC.GetTotalMemory在尝试分配内存之前返回4.5MB.
我发现只有很多人说使用不安全的代码,但我找不到如何在堆中声明2-dim数组的示例(任何堆栈都不能保存如此大量的数据)以及如何使用指针处理它.它是不安全的{}括号内的纯C++代码吗?
PS.请不要问为什么我需要如此庞大的数组...但如果你想 - 我需要分析文本(例如书籍)并找到很多索引.所以答案是 - 词之间关系的矩阵
编辑:有人可以提供一个使用不安全代码中的指针处理矩阵的小例子.我知道在32位以下不可能分配更多的空间,但我花了很多时间在谷歌搜索这样的例子,发现没什么
MVC3 添加了使用属性创建无会话控制器的好机会[SessionState(SessionStateBehavior.Disabled)]。这很好,但不灵活,因为您无法为每个控制器方法设置会话状态,也无法按条件启用它。
是否可以仅为经过身份验证的用户或通过其他自定义条件启用会话状态?即PHP有一个很棒的功能。
if (!isset($_SESSION)) session_start();
找到类似的东西就好了