我有一个要求,我需要在我的类中获取构造函数的变量名称.我尝试使用c#reflection,但constructorinfo没有提供足够的信息.因为它只提供参数的数据类型,但我想要名称,例如
class a
{
public a(int iArg, string strArg)
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要"iArg"和"strArg"
谢谢
对于有想法的人来说,这是一个奇怪的...我正在特定页面上渲染一个隐藏的布尔字段.但是,对于同一个字段,我会得到两个略有不同的标记,具体取决于特定事件是否在流程之前发生.生成的两个字段是;
<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应用:它有;
/通过HTTP检索根域的URL GET.布尔input标签呈现为True/False/Apply通过HTTP检索的URL向导中的第一页GET.布尔input标签呈现为True/FalsePOST.案例input标签现在呈现为true/ false.input标签现在以大写形式返回渲染(原始报告的问题).我一直在钻研MVC库,使用ILSpy来尝试扫描和MVC(如果我正确地读取代码)实际上使用了一个实现 …
我目前正在尝试RSACryptoServiceProvider仅从已解码的PEM文件创建对象.经过几天的搜索,我确实设法解决了一个有效的解决方案,但它不是一个可以生产就绪的解决方案.
简而言之,为了RSACryptoServiceProvider从组成PEM文件中的公钥的字节创建对象,我必须创建指定keysize的对象(当前使用SHA256的2048),然后RSAParameters使用Exponent和Modulusset 导入对象.我是这样做的;
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) 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) 这是一个有趣的.我有一个服务创建一堆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) 我有几个按钮和一个文本框.我想这样做,当我按下按钮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)
编辑:有没有更短的方法来做到这一点?
为什么解析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但是......是吗?
这让我有点头疼.最终,我正在尝试返回一张图片,但我一直在尝试并将其简化为使用字符串.
我想要的:转到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) 在我的场景中,我必须将数据从一个 Web 应用程序发送到一个有效的数据存储 webapi。请求必须是同步的,Exception如果出现问题,我绝对希望抛出,因为这意味着应用程序的关键部分不可用。
这是现有问题的衍生,但不是重复;为什么使用 HttpClient 进行同步连接。
然而一遍又一遍,包括在我上面看到的文章中,我看到一致的建议使用HttpClient,即使在同步场景中也是如此。我看到的最好的原因是上面 SO 帖子中接受的答案,但它基本上归结为;
使用它是因为“闪亮”。
对于我的场景,我不喜欢这是一个可接受的答案。我更愿意为手头的任务使用正确的对象,这似乎是较旧的HttpWebRequest. 甚至 Ben Watson 的优秀资源“编写高性能 .NET 代码”也说明了以下内容;
另一个例子是
System.Net.HttpWebRequest类,如果它收到来自服务器的非 200 响应,它将抛出异常。幸运的是,这种奇怪的行为System.Net.Http.HttpClient在 .NET 4.5的类中得到了纠正
但在我的情况,我其实不希望这样的行为。虽然 有很多很好的用例HttpClient,但谁能提供一个不在HttpWebRequest我的场景中使用的好理由?我是否使用了正确的对象?更重要的是,为什么?
基于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) 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# ×11
asp.net-mvc ×2
.net ×1
asn.1 ×1
asp.net ×1
button ×1
concurrency ×1
dynamic ×1
format ×1
httpclient ×1
ninject ×1
parsing ×1
pem ×1
razor ×1
reflection ×1
rsa ×1
task ×1
textbox ×1
xml ×1