小编Dis*_*nky的帖子

c#中构造函数参数的名称

我有一个要求,我需要在我的类中获取构造函数的变量名称.我尝试使用c#reflection,但constructorinfo没有提供足够的信息.因为它只提供参数的数据类型,但我想要名称,例如

class a
{    
    public a(int iArg, string strArg)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想要"iArg"和"strArg"

谢谢

c# reflection

20
推荐指数
2
解决办法
2万
查看次数

用不同情况渲染的布尔字段

对于有想法的人来说,这是一个奇怪的...我正在特定页面上渲染一个隐藏的布尔字段.但是,对于同一个字段,我会得到两个略有不同的标记,具体取决于特定事件是否在流程之前发生.生成的两个字段是;

<input id="HasPreviouslyIssuedCard" name="HasPreviouslyIssuedCard" type="hidden" value="false" />
Run Code Online (Sandbox Code Playgroud)

<input id="HasPreviouslyIssuedCard" name="HasPreviouslyIssuedCard" type="hidden" value="False" />
Run Code Online (Sandbox Code Playgroud)

问题是"值"属性中的文本的情况,您会注意到该文本是不同的,后来影响JS条件.生成这个的剃刀标记是;

@Html.Hidden("HasPreviouslyIssuedCard", Model.HasPreviouslyIssuedCard?.ToString(), new { id = nameof(Model.HasPreviouslyIssuedCard) })
Run Code Online (Sandbox Code Playgroud)

但是,我也尝试使用以下变体,在渲染隐藏字段时具有相同的差异;

@Html.HiddenFor(m => m.HasPreviouslyIssuedCard)
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能获得这种差异?要获得大写变体,我在进入相关页面之前点击浏览器后退按钮.两种方法都以相同的方式加载数据,并以相同的方式将相同的值传递给渲染器.两种不同的输出.

请记住,这是一个要呈现的布尔值类型字段.应该没有太大的修补空间.有很多种方法可以解决这个问题,但由于我们在积压工作中有两个与布尔字段和后退按钮有关的项目,我想解释一下而不是解决它.

我最好的猜测是,按下后退按钮会以某种方式改变渲染器的状态,或者模型中的其他一些标志是不同的(有70多个字段,因为它是一个向导)正在改变渲染器如何解释如何设置布尔值值.值相同,页面相同,数据以相同的方式读取.

基于这个页面(为什么Boolean.ToString输出"True"而不是"true"),我们应该假设一直是获得大写变体,但这不是结果.

任何接受者/想法/想法?

编辑1

通过HiddenFor()方法挖掘MVC的渲染逻辑,最终Convert.ToString(value, CultureInfo.CurrentCulture)被称为.直接调用时,我不能让它产生一个小写的布尔值,但它显然是这样做的.我当前的文化代码设置为en-IE但我在直接调用时看到了大写的布尔值.

编辑2

我已经对我的应用程序进行了更多的修补和跟踪,并且可以提供更多有关正在发生的事情的详细信息,但我还没有能够在更简单的应用程序中重现这一点.

MVC 5应用:它有;

  1. 初始登录页面,/通过HTTP检索根域的URL GET.布尔input标签呈现为True/False
  2. /Apply通过HTTP检索的URL向导中的第一页GET.布尔input标签呈现为True/False
  3. 在步骤2中用户提交页面后,向导中的第二页在同一URL处.通过HTTP检索POST.案例input标签现在呈现为true/ false.
  4. 点击浏览器的后退按钮并点击陷阱页面(我们将浏览器历史记录设置为始终点击Back上的陷阱页面,因为它与向导一起玩快乐地狱).
  5. 用户点击陷阱页面上的按钮,将它们带回到他们中断的应用程序中.input标签现在以大写形式返回渲染(原始报告的问题).

我一直在钻研MVC库,使用ILSpy来尝试扫描和MVC(如果我正确地读取代码)实际上使用了一个实现 …

c# asp.net-mvc razor

12
推荐指数
1
解决办法
945
查看次数

从公钥正确创建RSACryptoServiceProvider

我目前正在尝试RSACryptoServiceProvider仅从已解码的PEM文件创建对象.经过几天的搜索,我确实设法解决了一个有效的解决方案,但它不是一个可以生产就绪的解决方案.

简而言之,为了RSACryptoServiceProvider从组成PEM文件中的公钥的字节创建对象,我必须创建指定keysize的对象(当前使用SHA256的2048),然后RSAParameters使用ExponentModulusset 导入对象.我是这样做的;

byte[] publicKeyBytes = Convert.FromBase64String(deserializedPublicKey.Replace("-----BEGIN PUBLIC KEY-----", "")
                                                                      .Replace("-----END PUBLIC KEY-----", ""));

// extract the modulus and exponent based on the key data
byte[] exponentData = new byte[3];
byte[] modulusData = new byte[256];
Array.Copy(publicKeyBytes, publicKeyBytes.Length - exponentData.Length, exponentData, 0, exponentData.Length);
Array.Copy(publicKeyBytes, 9, modulusData, 0, modulusData.Length);


// import the public key data (base RSA - works)
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(dwKeySize: 2048);
RSAParameters rsaParam = rsa.ExportParameters(false);
rsaParam.Modulus = modulusData; …
Run Code Online (Sandbox Code Playgroud)

c# rsa asn.1 rsacryptoserviceprovider pem

9
推荐指数
2
解决办法
8387
查看次数

Ninject动态绑定到实现

SO上有几个类似的问题,但不完全是我要寻找的问题。我想基于运行时条件进行Ninject绑定,这在启动时并不为人所知。关于用于动态绑定的SO的其他问题围绕基于配置文件或类似文件的绑定-我需要在处理特定实体的数据时根据数据库值有条件地进行绑定。例如,

public class Partner
{
    public int PartnerID { get; set; }
    public string ExportImplementationAssembly { get; set; }
}

public interface IExport
{
    void ExportData(DataTable data);
}
Run Code Online (Sandbox Code Playgroud)

在其他地方,我有2个实现IExport的dll。

public PartnerAExport : IExport
{
    private readonly _db;
    public PartnerAExport(PAEntities db)
    {
        _db = db;
    }
    public void ExportData(DataTable data)
    {
        // export parter A's data...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后是伙伴B;

public PartnerBExport : IExport
{
    private readonly _db;
    public PartnerBExport(PAEntities db)
    {
        _db = db;
    }
    public void ExportData(DataTable data)
    {
        // …
Run Code Online (Sandbox Code Playgroud)

c# ninject ninject-extensions ninject-conventions

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

运行多个任务会重用相同的对象实例

这是一个有趣的.我有一个服务创建一堆Tasks.目前,列表中只配置了两个任务.但是,如果我在Task操作中放置一个断点并检查其值schedule.Name,则会使用相同的计划名称命中两次.但是,会在计划列表中配置两个单独的计划.任何人都可以解释为什么任务重用循环中的最后一个计划?这是范围问题吗?

// make sure that we can log any exceptions thrown by the tasks
TaskScheduler.UnobservedTaskException += new EventHandler<UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);

// kick off all enabled tasks
foreach (IJobSchedule schedule in _schedules)
{
    if (schedule.Enabled)
    {
        Task.Factory.StartNew(() =>
                                {
                                    // breakpoint at line below. Inspecting "schedule.Name" always returns the name 
                                    // of the last schedule in the list. List contains 2 separate schedule items.
                                    IJob job = _kernel.Get<JobFactory>().CreateJob(schedule.Name);
                                    JobRunner jobRunner = new JobRunner(job, schedule);
                                    jobRunner.Run();
                                },
                                CancellationToken.None, …
Run Code Online (Sandbox Code Playgroud)

c# concurrency task

4
推荐指数
1
解决办法
1408
查看次数

C#如何将不同按钮的按钮文本设置为同一文本框

我有几个按钮和一个文本框.我想这样做,当我按下按钮1时,文本框中的文本转到按钮,当我按下按钮2时,文本转到按钮2,依此类推.我现在有这个:

protected void Button1_Click(object sender, EventArgs e)
    {

        Button1.Text = TextBox1.Text;
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        Button2.Text = TextBox1.Text;
    }

    protected void Button3_Click(object sender, EventArgs e)
    {
        Button3.Text = TextBox1.Text;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:有没有更短的方法来做到这一点?

c# asp.net textbox button

4
推荐指数
1
解决办法
1107
查看次数

为什么decimal.Parse()慢于(decimal)double.Parse()?

为什么解析double.Parse()和转换decimal而不是调用更快decimal.Parse()

鉴于以下内容;

string stringNumber = "18.34";

double dResult = 0d;
decimal mResult = 0m;
for (int i = 0; i < 9999999; i++)
{
    mResult = (decimal)double.Parse(stringNumber);
    mResult = decimal.Parse(stringNumber);
}
Run Code Online (Sandbox Code Playgroud)

在VS2017分析器(.NET framework v4.7)中得出以下度量标准; 性能指标

累计double.Parse()和演员占CPU使用率的37.84%,而CPU占decimal.Parse()46.93%.这里有更多不同之处,可以很容易地归结为数据类型大小的差异.谁能解释一下?

在探查器上出现的应用程序需要10天以上才能运行,因此这个小差异相当于运行时间.理解为什么会很好.我可以看到这些decimal.Parse()呼唤,oleaut32.dll但是......是吗?

.net c# parsing

4
推荐指数
1
解决办法
150
查看次数

当返回类型为HttpResponseMessage时,Web Api Get()路由不起作用

这让我有点头疼.最终,我正在尝试返回一张图片,但我一直在尝试并将其简化为使用字符串.

我想要的:转到URL:

http://xxx/api/helloworld/1
Run Code Online (Sandbox Code Playgroud)

回应:"Hello world!"

以下web api声明适用于提供的url;

public string Get([FromUri]int id) { return "Hello World"; }
public Task<string> Get([FromUri]int id) { return "Hello World"; }
Run Code Online (Sandbox Code Playgroud)

什么不起作用;

public HttpResponseMessage Get([FromUri]int id) 
{ 
    return Request.CreateResponse<string>(HttpStatusCode.OK, "Hello World");
}

public HttpResponseMessage Get([FromUri]int id)
{
    HttpResponseMessage response = new HttpResponseMessage();

    string text = "Hello World";
    MemoryStream test = new MemoryStream();
    test.Write(ConversionUtilities.ToBytes(text) /*custom string->byte[] method, UTF-8 encoding*/, 0, text.Length);

    response.Content = new StreamContent(test);
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
    response.StatusCode = HttpStatusCode.OK;

    return response;
}
Run Code Online (Sandbox Code Playgroud)

当我有一个返回类型为HttpResponseMessage的Get()时会发生以下错误:

No …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-routing asp.net-web-api

2
推荐指数
1
解决办法
4430
查看次数

为什么在 HttpWebRequest 上使用 HttpClient 进行同步请求

在我的场景中,我必须将数据从一个 Web 应用程序发送到一个有效的数据存储 webapi。请求必须是同步的,Exception如果出现问题,我绝对希望抛出,因为这意味着应用程序的关键部分不可用。

这是现有问题的衍生,但不是重复;为什么使用 HttpClient 进行同步连接

然而一遍又一遍,包括在我上面看到的文章中,我看到一致的建议使用HttpClient,即使在同步场景中也是如此。我看到的最好的原因是上面 SO 帖子中接受的答案,但它基本上归结为;

使用它是因为“闪亮”。

对于我的场景,我不喜欢这是一个可接受的答案。我更愿意为手头的任务使用正确的对象,这似乎是较旧的HttpWebRequest. 甚至 Ben Watson 的优秀资源“编写高性能 .NET 代码”也说明了以下内容;

另一个例子是System.Net.HttpWebRequest类,如果它收到来自服务器的非 200 响应,它将抛出异常。幸运的是,这种奇怪的行为System.Net.Http.HttpClient在 .NET 4.5的类中得到了纠正

但在我的情况,我其实希望这样的行为。虽然 有很多很好的用例HttpClient,但谁能提供一个不在HttpWebRequest我的场景中使用的好理由?我是否使用了正确的对象?更重要的是,为什么

c# httpclient httpwebrequest

2
推荐指数
1
解决办法
2284
查看次数

使用动态类型的流畅XML转换

基于Kevin Hazzard的帖子; http://blogs.captechconsulting.com/blog/kevin-hazzard/fluent-xml-parsing-using-cs-dynamic-type-part-1 我正在尝试使用逻辑.基本上应该做的是获取一段XML并将其转换为可以使用的对象.比如说我的xml是;

<someObject>
    <Name>Timmy</Name>
</someObject>
Run Code Online (Sandbox Code Playgroud)

我希望能够做到;

dynamic obj = Converter(xmlText);
string name obj.Name;
Run Code Online (Sandbox Code Playgroud)

经过大量的谷歌搜索,我遇到了凯文的博客并发布了一个DynamicXml应该完成工作的对象,但是我无法让它工作(或者我没有正确使用它).我对.NET的Expando对象的理解是有限的,我没有代码样本去博客文章吧.我把凯文关于这个主题的两篇文章整理成一个单独的对象.

public class DynamicXml : DynamicObject, IEnumerable
{
    private readonly List<XElement> _elements;

    public DynamicXml(string text)
    {
        var doc = XDocument.Parse(text);
        _elements = new List<XElement> { doc.Root };
    }

    protected DynamicXml(XElement element)
    {
        _elements = new List<XElement> { element };
    }

    protected DynamicXml(IEnumerable<XElement> elements)
    {
        _elements = new List<XElement>(elements);
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        result = null; …
Run Code Online (Sandbox Code Playgroud)

c# xml dynamic

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

C#Console WriteLine System.FormatException:

string CPP_NAME_SPACE = "test"
System.Console.WriteLine("} // namespace {0}", CPP_NAME_SPACE); // FormatException

System.Console.WriteLine("} // namespace {0}"); // normal

System.Console.WriteLine("// namespace {0}", CPP_NAME_SPACE); // normal
Run Code Online (Sandbox Code Playgroud)

为什么第一行抛出FormatException但不抛出第二行?

c# format

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