小编Bal*_*kas的帖子

在不知道参数类型的情况下为方法生成随机参数值

我想解决什么问题?通过反射,我想执行代码(运行实例方法和静态方法),其中我事先不知道如何定义要运行的方法。

假设我有一个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可以是任何东西。

c#

5
推荐指数
1
解决办法
1360
查看次数

Visual Studio 2015中后台编译器的行为

我正在使用visual studio 2015(v14)的预览来编写一些C#,我一直想知道后台编译器实际上做了什么.根据我的理解,它检查代码编辑器的状态,并且足够聪明,知道何时停止编辑几毫秒,然后利用机会编译它并显示错误/警告.

我认为,如果在大型代码库中编辑部分代码并且具有大量依赖性(许多其他部分依赖于该特定代码段),则后台编译器的编译时间会增加.但无论是上述情况还是只是一个简单的hello world console应用程序,编译时间都非常不变,在我的机器上大约需要2秒.

显然,编译器不会对所有内容进行完全重新构建,但它是如何做到的呢?使用Roslyn API的哪一部分?那里有一些文章在解释这个吗?搜索但没有找到任何东西.

c# compiler-construction visual-studio roslyn

5
推荐指数
1
解决办法
827
查看次数

如何在没有附加调试器的情况下运行asp.net应用程序

我想构建我的解决方案,然后打开浏览器并测试它,而不按F5.应该很简单,我确信我已经多次这样做了,但在其他VS版本中.

我只是想弄明白:)我已经在IIS和我的应用程序的项目设置中尝试了不同的设置.从VS,我使用IISExpress,项目网址是

http://localhost:1234/
Run Code Online (Sandbox Code Playgroud)

我在VS2013上使用asp.net mvc 5

我希望能够关闭VS实例并仍然运行应用程序

asp.net visual-studio

3
推荐指数
1
解决办法
3444
查看次数

请求更改时 Blazor Virtualize 更新

我有一个组件,可以显示数据库中最多 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">&nbsp;</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)

blazor

3
推荐指数
2
解决办法
2477
查看次数

没有可执行代码的顶层程序不编译

我有一个面向 net5 的控制台应用程序,应用程序中唯一的一行代码是这样的

System.Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但是当我删除该行时,出现编译错误,指出缺少入口点。这是错误:https : //docs.microsoft.com/en-us/dotnet/csharp/misc/cs5001

我的问题是为什么编译器的行为会有所不同。在这种情况下,为什么编译器将顶级程序与非顶级程序不同地对待,其中将出现静态“Main”方法?

c# .net-5 c#-9.0

3
推荐指数
1
解决办法
256
查看次数