相关疑难解决方法(0)

如何使用反射来调用私有方法?

我的类中有一组私有方法,我需要根据输入值动态调用一个.调用代码和目标方法都在同一个实例中.代码如下所示:

MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType);
dynMethod.Invoke(this, new object[] { methodParams });
Run Code Online (Sandbox Code Playgroud)

在这种情况下,GetMethod()不会返回私有方法.什么BindingFlags我需要提供以GetMethod()使其能找到私有方法?

.net c# reflection private-methods

314
推荐指数
6
解决办法
16万
查看次数

C#加倍到十进制精度损失

我有一个双"138630.78380386264",我想将它转换为十进制,但是当我这样做时,我通过铸造或使用Convert.ToDecimal(),我失去精度.

这是怎么回事?decimal和double都可以保存这个数字:

在此输入图像描述

double doub = double.Parse("138630.78380386264");
decimal dec = decimal.Parse("138630.78380386264");
string decs = dec.ToString("F17");
string doubse =DoubleConverter.ToExactString(doub);
string doubs = doub.ToString("F17");

decimal decC = (decimal) doub;
string doudeccs = decC.ToString("F17");
decimal decConv = Convert.ToDecimal(doub);
string doudecs = decConv.ToString("F17");
Run Code Online (Sandbox Code Playgroud)

另外:如何使用ToString()on double打印出与调试器显示的相同的结果?例如138630.78380386264

c# precision double decimal

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

使用 System.Text.Json 序列化 BigInteger

我正在BigInteger使用以下命令将 a 序列化为 JSON System.Text.Json

JsonSerializer.Serialize(new {foo = new BigInteger(ulong.MaxValue) + 1})
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

{"foo":{"IsPowerOfTwo":true,"IsZero":false,"IsOne":false,"IsEven":true,"Sign":1}}
Run Code Online (Sandbox Code Playgroud)

如果我添加一个将值转换BigInteger为 a 的转换器ulong,它当然会失败,因为该BigInteger值太大:

var options = new JsonSerializerOptions();
options.Converters.Add(new BigIntegerConverter());
JsonSerializer.Serialize(new {foo = new BigInteger(ulong.MaxValue) + 1}, options);
Run Code Online (Sandbox Code Playgroud)

这是转换器:

public class BigIntegerConverter : JsonConverter<BigInteger>
{
    public override BigInteger Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => throw new NotImplementedException();

    public override void Write(Utf8JsonWriter writer, BigInteger value, JsonSerializerOptions options) => writer.WriteNumberValue((ulong)value);
}
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

{"foo":18446744073709551616}
Run Code Online (Sandbox Code Playgroud)

我知道这可以通过JsonWriter.WriteRawValueJson.NET 来实现,但我仅限于使用 …

c# biginteger json-serialization jsonconverter system.text.json

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