我正在尝试生成一个简单的脚本系统,用于打印标签.我在过去做过这个没有问题的反射,但我现在正在尝试使用Lambda函数,以便我可以缓存函数以便重用.
我到目前为止的代码如下......
public static string GetValue<T>(T source, string propertyPath) {
try {
Func<T, Object> func;
Type type = typeof(T);
ParameterExpression parameterExpression = Expression.Parameter(type, @"source");
Expression expression = parameterExpression;
foreach (string property in propertyPath.Split('.')) {
PropertyInfo propertyInfo = type.GetProperty(property);
expression = Expression.Property(expression, propertyInfo);
type = propertyInfo.PropertyType;
}
func = Expression.Lambda<Func<T, Object>>(expression, parameterExpression).Compile();
object value = func.Invoke(source);
if (value == null)
return string.Empty;
return value.ToString();
}
catch {
return propertyPath;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎在某些情况下有效,但在其他情况下却失败了.问题似乎在于我试图将值作为对象返回 - 无论实际数据类型如何.我试图这样做是因为我不知道在编译时数据类型是什么,但从长远来看,我只需要一个字符串.
每当我尝试访问Int32类型的属性时,我都会收到此消息标题中显示的异常 - 但我也是为Nullable类型和其他类型获取它.当我尝试将表达式编译到函数中时抛出异常.
任何人都可以建议我在保持Lambda功能的同时以不同的方式解决这个问题,以便我可以缓存访问器吗?
我是在一个新的开始Prism.Forms
的项目,我想知道其中的各种的IoC
容器(Autofac
,Dryloc
,Ninject
或Unity
)将是最好的与前进.
我不知道这是否属实,但我在某处读到Unity已不再处于积极开发状态,因为这MEF
是我用过的唯一IoC
容器,我不确定它是否可行.
与此同时,我知道很少或根本不知道Autofac
,Dryloc
或者Ninject
.
请客观地提出任何建议,说明为什么你觉得一个人比其他人好,而不仅仅是"我用xxx "; 我想做出明智的决定.
我有一个表格,我正在使用jquery.validate.我最初使用一组规则和自定义消息调用validate ...
$("#formName").validate( {
rules: {
myExistingInput: {
required: true
}
},
messages: {
myExistingInput: {
required: "Enter something"
}
},
ignore: null, // include hidden fields (see below)
submitHandler: function(form) {
// do stuff
},
invalidHandler: function(event, validator) {
// do stuff (some of the fields may have been hidden by a collapsible panel
// if there is an error on one of those fields, expand the panel so the error
// becomes visible)
}
});
Run Code Online (Sandbox Code Playgroud)
稍后,我动态地向表单添加字段,并为这些字段添加规则...
$("#formName").append(...);
$("#newInputName").rules("add", …
Run Code Online (Sandbox Code Playgroud) 我试图在WinRT中找到一个API,它允许我创建一个本地数据库,可用于存储偶尔连接的应用程序的数据.我正在寻找像SQL Compact Edition这样的东西.
我在各种电路板上看到了各种消息,表明存在这些消息
有没有人对此有明确的答案?如果它被封锁,我不想开始这条路.
database local-storage microsoft-metro windows-runtime windows-store-apps
有人可以帮我构建这个正则表达式吗...
鉴于以下字符串......
我需要一个正则表达式,它将从文本中提取两个数字.月份名称会有所不同.括号,"小部件少"和"链轮"文本不会在字符串之间发生变化,但是如果这个文本也可以变化,那将非常有用.
提前致谢.
我有一个简单的方法,当使用ASP.NET 4.0路由与Web窗体生成一个将充当某种通配符的路由?
在我看来,在WebForms中,你必须为每个页面指定一个路由 - 我正在寻找某种通用路由,可以在没有特定需要的地方使用,也许直接从路径映射到路径所以......
http://somedomain.com/folder1/folder2/page可能会映射到folder1/folder2/page.aspx
有什么建议?
谢谢
我开始第一次尝试使用MEF和WPF进入Prism v4/MVVM的世界.我成功构建了一个shell,使用MEF,我能够发现并初始化模块.但是,我不确定为这些模块公开的视图提供导航的正确方法.
例如,假设其中一个模块公开了三个视图,我想在菜单控件上显示这些视图的导航.到目前为止,我已经成功地暴露了一个基于a的视图,MenuItem
并且它MenuItem
包含子MenuItem
控件,因此提供了可以使用的命令层次结构.大.
事情是,这感觉不对.我现在在我的模块中说明导航(因此shell)必须支持使用菜单.如果我想换到使用ToolBar
,甚至一个Ribbon
.然后我必须更改所有模块以显示shell的相应控件类型.
我环顾四周,有些网站提到使用"服务"来提供导航,在模块初始化期间,导航选项被添加到服务中,而服务又被shell用来显示导航格式就是了(ToolBar
,TreeView
,Ribbon
,MenuItem
等) -但我不能找到真正做任何的例子.
为了全面了解这一点,我最终希望能够从菜单和/或其他导航控件(可能是a Ribbon
)中选择视图,然后在TabControl中按需打开这些视图.我已经得到了能够在TabControl
at模块初始化时创建视图,现在我需要下一步.
我需要知道的是:以这样的方式公开导航选项的正确方法是什么,而不是坚持支持shell的特定控件,如果服务是方式,那么如何放置这一点在Prism/MVVM模式中.
提前感谢您提供的任何见解.
我正在寻找可以提供有关在Windows 8(x64)上使用Visual Studio 2008和2010的问题的任何信息.我已经找到以下文章来识别W8上VS2010的已确认问题,但我找不到VS2008的任何类似文章.
具体来说,我使用VS2008进行移动开发,所以我不能简单地将项目升级到2010/2012(但是),但我也有一些Web应用程序项目,甚至可能还有一些控制台和/或Windows窗体项目.
我将希望将Visual Studio 2008,2010和2012彼此并排安装.
我知道明显的答案是尝试它,但我需要在升级我的生产PC之前有信心,因此希望听到其他用户可能遇到的任何问题(任何已经确定与他们一起去的解决方法)适当).
compatibility visual-studio-2010 visual-studio-2008 windows-8 visual-studio-2012
鉴于以下代码......
static void DoSomething(int id) {
Thread.Sleep(50);
Console.WriteLine(@"DidSomething({0})", id);
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以将其转换为异步任务,如下所示......
static async Task DoSomethingAsync(int id) {
await Task.Delay(50);
Console.WriteLine(@"DidSomethingAsync({0})", id);
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,如果我多次调用(Task.WhenAll),一切都会比使用Parallel.Foreach或甚至在循环内调用更快更高效.
但是有一分钟,让我们假装Task.Delay()不存在,我实际上必须使用Thread.Sleep(); 我知道实际情况并非如此,但这是概念代码,延迟/睡眠通常是一个IO操作,其中没有异步选项(例如早期EF).
我试过以下......
static async Task DoSomethingAsync2(int id) {
await Task.Run(() => {
Thread.Sleep(50);
Console.WriteLine(@"DidSomethingAsync({0})", id);
});
}
Run Code Online (Sandbox Code Playgroud)
但是,虽然它运行没有错误,但Lucien Wischik认为这实际上是不好的做法,因为它只是从池中启动线程来完成每项任务(使用以下控制台应用程序也会更慢 - 如果你在DoSomethingAsync和DoSomethingAsync2之间交换打电话你可以看到完成所需时间的显着差异)...
static void Main(string[] args) {
MainAsync(args).Wait();
}
static async Task MainAsync(String[] args) {
List<Task> tasks = new List<Task>();
for (int i = 1; i <= 1000; i++)
tasks.Add(DoSomethingAsync2(i)); // Can replace with any …
Run Code Online (Sandbox Code Playgroud)