我想解决什么问题?通过反射,我想执行代码(运行实例方法和静态方法),其中我事先不知道如何定义要运行的方法。
假设我有一个MethodInfo
想要调用的。我不知道它有什么参数,所以我做了以下操作。
首先,我检查方法参数是否有效(如果无效,则不会调用方法):
private static IEnumerable<Type> GetValidMethodTypes()
{
var validTypes = new List<Type>();
validTypes.AddRange(new[]
{
typeof (SByte),
typeof(String[]),
//etc...
});
return validTypes;
}
Run Code Online (Sandbox Code Playgroud)
然后我根据参数类型生成随机值:
public object RandomizeParamValue(string typeName)
{
switch (typeName)
{
case "SByte":
{
//return randomized value
}
case "String[]":
{
//return randomized value
}
//etc...
}
}
Run Code Online (Sandbox Code Playgroud)
例如,String[] 的随机值将为 ["a","ab", "ccc"] 或 ["aa", "b"]。公式为:new string[random size between 1 and 5],其中包含随机长度的随机字符串。一切都超级随机:)
问题是这仅适用于我的代码中支持的类型。我当然可以添加对更多类型的支持,但这需要大量工作。我想让它变得更通用,但我真的不知道该怎么做。我用谷歌搜索过这个但什么也没找到。有人知道此类问题的解决方案/已知模式吗?
我可以像这样重新表述问题:我如何通过反射调用以下方法:
void SomeMethod(unknowntypeatcompiletime param);
Run Code Online (Sandbox Code Playgroud)
其中unknowntypeatcompiletime可以是任何东西。
我正在使用visual studio 2015(v14)的预览来编写一些C#,我一直想知道后台编译器实际上做了什么.根据我的理解,它检查代码编辑器的状态,并且足够聪明,知道何时停止编辑几毫秒,然后利用机会编译它并显示错误/警告.
我认为,如果在大型代码库中编辑部分代码并且具有大量依赖性(许多其他部分依赖于该特定代码段),则后台编译器的编译时间会增加.但无论是上述情况还是只是一个简单的hello world console应用程序,编译时间都非常不变,在我的机器上大约需要2秒.
显然,编译器不会对所有内容进行完全重新构建,但它是如何做到的呢?使用Roslyn API的哪一部分?那里有一些文章在解释这个吗?搜索但没有找到任何东西.
我想构建我的解决方案,然后打开浏览器并测试它,而不按F5.应该很简单,我确信我已经多次这样做了,但在其他VS版本中.
我只是想弄明白:)我已经在IIS和我的应用程序的项目设置中尝试了不同的设置.从VS,我使用IISExpress,项目网址是
http://localhost:1234/
Run Code Online (Sandbox Code Playgroud)
我在VS2013上使用asp.net mvc 5
我希望能够关闭VS实例并仍然运行应用程序
我有一个组件,可以显示数据库中最多 200000 名的运动员。\n它工作得很好,但是当我添加一个带有国家/地区列表的选择来过滤结果时,我可以看到结果计数已更新,但虚拟化组件在滚动之前不会更新?
\n\n@page "/persons"\n@inject HttpClient Http\n\n\n<div class="container-fluid">\n <div class="row">\n <div class="col-12">\n <h1>@($"{totalindividu:### ### ##0}") athletes linked</h1>\n </div>\n </div>\n <div class="row">\n <div class="col-4">\n <select class="form-control" @onchange="ChangePays">\n <option value="-1" selected>Pas de s\xc3\xa9lection sur le pays</option>\n @if (pays != null)\n {\n @foreach (var p in pays)\n {\n <option value="@p.aatpays_id">@p.aaipays_nom</option>\n }\n }\n </select>\n </div>\n <div class="col-4"> </div>\n <div class="col-4"><p>@selpays</p></div>\n </div>\n <div class="row">\n <div class="col-12">\n <table class="table">\n <thead>\n <tr>\n <th>ID</th>\n <th>Code</th>\n <th>Nom long</th>\n <th>Pays</th>\n <th>Discipline</th>\n <th>Date de naissance</th>\n </tr>\n </thead>\n <tbody>\n <Virtualize Context="individu" ItemsProvider="@LoadIndividus">\n …
Run Code Online (Sandbox Code Playgroud) 我有一个面向 net5 的控制台应用程序,应用程序中唯一的一行代码是这样的
System.Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)
它按预期工作,但是当我删除该行时,出现编译错误,指出缺少入口点。这是错误:https : //docs.microsoft.com/en-us/dotnet/csharp/misc/cs5001
我的问题是为什么编译器的行为会有所不同。在这种情况下,为什么编译器将顶级程序与非顶级程序不同地对待,其中将出现静态“Main”方法?