我将对象值存储在字符串中,例如,
string[] values = new string[] { "213.4", "10", "hello", "MyValue"};
Run Code Online (Sandbox Code Playgroud)
有没有办法一般初始化适当的对象类型?例如,像
double foo1 = AwesomeFunction(values[0]);
int foo2 = AwesomeFunction(values[1]);
string foo3 = AwesomeFunction(values[2]);
MyEnum foo4 = AwesomeFunction(values[3]);
Run Code Online (Sandbox Code Playgroud)
AwesomeFunction我需要的功能在哪里 最终用途是初始化属性,例如,
MyObject obj = new MyObject();
PropertyInfo info = typeof(MyObject).GetProperty("SomeProperty");
info.SetValue(obj, AwesomeFunction("20.53"), null);
Run Code Online (Sandbox Code Playgroud)
我需要这样的功能的原因是我将所述值存储在数据库中,并希望通过查询读出它们,然后初始化对象的相应属性.这有可能吗?整个对象没有存储在数据库中,只是我想要动态读取和设置的几个字段.我知道我可以静态地做到这一点,但是这将变得乏味,难以维护,并且正在阅读具有许多不同字段/属性的容易出错的情况.
编辑:奖励积分如果AwesomeFunction可以使用自定义类,指定一个接受字符串的构造函数!
EDIT2:在我想要使用此类功能的特定情况下,可以通过PropertyType了解目标类型.我认为枚举很容易解析,例如,
Type destinationType = info.PropertyType;
Enum.Parse(destinationType, "MyValue");
Run Code Online (Sandbox Code Playgroud) 是否有任何内置或第三方库允许您在运行时简单地将所有变量转储到内存中?我想要的是能够查看变量和当前值,类似于通过点击断点并将鼠标悬停在变量上来查看变量和当前值,但实际上不必停止程序执行(即只是获取快照).如果它可以将它们转储到一个文件然后可以在程序中打开以获得一个很好的GUI界面来查看它们会很好,但是简单的文本文件转储就足够了.
有没有人知道在C#中进行多元线性回归的有效方法,其中联立方程的数量可能在1000(有3或4个不同的输入).在阅读了关于多元线性回归的这篇文章之后,我尝试用矩阵方程实现它:
Matrix y = new Matrix(
new double[,]{{745},
{895},
{442},
{440},
{1598}});
Matrix x = new Matrix(
new double[,]{{1, 36, 66},
{1, 37, 68},
{1, 47, 64},
{1, 32, 53},
{1, 1, 101}});
Matrix b = (x.Transpose() * x).Inverse() * x.Transpose() * y;
for (int i = 0; i < b.Rows; i++)
{
Trace.WriteLine("INFO: " + b[i, 0].ToDouble());
}
Run Code Online (Sandbox Code Playgroud)
然而,由于矩阵求逆运算,它不能很好地扩展到1000的方程.我可以调用R语言并使用它,但是我希望有一个纯粹的.Net解决方案可以扩展到这些大型集合.
有什么建议?
编辑#1:
我暂时使用R定居.通过使用statconn(在这里下载),我发现它既快又相对容易使用这种方法.即这里是一个小代码片段,使用R statconn库真的没有太多代码(注意:这不是所有的代码!).
_StatConn.EvaluateNoReturn(string.Format("output <- lm({0})", equation));
object intercept = _StatConn.Evaluate("coefficients(output)['(Intercept)']");
parameters[0] = (double)intercept;
for …Run Code Online (Sandbox Code Playgroud) 我刚才的原始问题是MSMQ Slow Queue Reading,但是我已经提出了这个问题,现在我觉得我知道这个问题更清楚了.
我的代码(实际上是我正在使用的开源库的一部分)看起来像这样:
queue.Receive(TimeSpan.FromSeconds(10), MessageQueueTransactionType.Automatic);
Run Code Online (Sandbox Code Playgroud)
哪个使用Messaging.MessageQueue.Receive函数和队列是MessageQueue.问题如下.
将使用指定的超时(10秒)调用上面的代码行.该Receive(...)函数是一个阻塞函数,并且应该阻塞,直到消息到达队列,此时它将返回.如果在超时之前没有收到任何消息,它将在超时时返回.如果在调用函数时消息在队列中,它将立即返回该消息.
然而,正在发生的Receive(...)是正在调用函数,看到队列中没有消息,因此等待新消息进入.当新消息进入时(超时之前),它没有检测到这条新消息并继续等待.最终会超时超时,此时代码会继续并Receive(...)再次调用,然后它会获取消息并对其进行处理.
现在,此问题仅在数天/周后发生.通过删除和重新创建队列,我可以再次正常工作.它发生在不同的计算机和不同的队列上.因此,似乎某些东西正在积累,直到它打破了该Receive(...)函数使用的触发/通知能力.
我检查了很多不同的东西,一切看起来都很正常,与正常工作的队列没什么不同.有足够的磁盘空间(13gig免费)和RAM(从我可以告诉的1GB大约350MB空闲).我检查了所有看起来与其他队列相同的注册表项,并且性能监视器没有显示任何异常.我也运行了TMQ工具,看不出任何明显的错误.
我在所有机器上都使用Windows XP,它们都安装了Service Pack 3.我没有向队列发送大量消息,最多每2秒发送一次,但通常不会那么频繁.这些消息也很小,远不及4MB的限制.
我刚刚注意到的唯一事情是C:\ WINDOWS\system32\msmq\storage中的p0000001.mq和r0000067.mq文件都是4,096KB,但是在其他计算机上它们的大小也是当前没有遇到问题的.问题不会立即发生在计算机上的每个队列中,因为我可以在计算机上重新创建1个问题队列,而其他队列仍然会遇到问题.
我对MSMQ不是很有经验,所以如果你发布可能要检查的东西,请解释如何检查它们或在哪里可以找到你所谈论的更多细节.
目前的情况是:
所以我有大量的计算机/队列来比较和测试.
如果我有一个大的HTTP数据包已被拆分成多个TCP数据包,我怎样才能将它们重新组合成一个HTTP数据包?基本上,在数据包的哪个位置,我想知道HTTP数据包何时开始/结束?我似乎无法在TCP标头中看到任何表示HTTP数据包开始或结束的标志/字段.
编辑:跟进回复.如果TCP管理流,它如何知道流何时开始和结束?这是由插座开合决定的吗?某些协议在某种程度上必须能够知道HTTP流/数据包何时开始和结束.这就是我想知道的.
我所处的情况是我在C#中使用数据包嗅探器读取TCP数据包,我希望能够重建HTTP请求/响应/等.像wireshark和其他各种嗅探器一样通过界面.或者,是否有任何C#库可以让您在更高级别进入HTTP流,从而节省了我自己重建HTTP流/数据包的麻烦?
谢谢.
如果主键是单列(例如,为每行生成的GUID)或多列(例如,外键GUID +偏移号),则表(在插入/更新和查询方面)性能是否存在任何差异? )?
我会假设查询速度应该更快,如果有任何多列主键,但我会想象插入会更慢,因为一个稍微复杂的独特检查?我还想象多列主键的数据类型也很重要(例如,如果其中一列是DateTime类型,则会增加复杂性).这些只是我想要调用答案和讨论(希望!)并且不是基于事实的.
我正在更新我的 protobuf-net 库参考,特别是从2.4.4到3.0.101。以前,我们null在列表中使用,因为它们包含对业务有意义的信息(例如,new[] { "one", "two", null, null, "five" })。但是,据我了解(https://protobuf-net.github.io/protobuf-net/releasenotes#),3.x尚不支持它们。
是否有针对具有空值的集合的建议迁移策略?
我可以通过附加字段来减轻未来的变化(例如,将集合转换为字典并在序列化/反序列化时再次返回),但是对于使用 2.x 库序列化的数据,向后兼容性似乎被破坏了。是否有任何迁移指南?
是否有任何库可以轻松比较C#中2个字符串的"相似性"?我在想的是如果你有弦乐,
"This is a test" // 100%
"THIS IS A TEST" // 95%
" This is a test" // 98%
"This is" // 60%
"Foobar" // 0%
"this test is a" // 70%
Run Code Online (Sandbox Code Playgroud)
与基本字符串相比,每个人都会获得一个分数.
是否有任何C#库提供了相同类型的功能谷歌在您输入查询时所做的功能,例如"13英里743码(米)",它将返回"21 600米"(例如).
我想要做的是给函数字符串部分13 miles 743 yards,它以一个给定的距离(以米为单位)吐出一个int/double.它需要能够处理所有单位输入类型(公里/米/弗隆/英里/码/ ...),但输出只需要以米为单位.
编写自己的文件并不难,但只要有一个经过测试的库就可以了.
鉴于以下课程,
public static void Test()
{
var bigDictionary = new Dictionary<string, TestClass>();
bigDictionary.Add("entry1", new TestClass());
bigDictionary.Add("entry2", new TestClass());
bigDictionary.Add("entry3", new TestClass());
// EDIT: Added these lines
bigDictionary["entry1"].MyDictionary.Add(1, new SecondTestClass() { MyVar = "hello" });
bigDictionary["entry1"].MyDictionary.Add(2, new SecondTestClass() { MyVar = "world" });
bigDictionary["entry2"].MyDictionary.Add(1, new SecondTestClass() { MyVar = "please" });
bigDictionary["entry2"].MyDictionary.Add(2, new SecondTestClass() { MyVar = "work" });
using (var file = System.IO.File.Create("test.temp"))
{
ProtoBuf.Serializer.Serialize(file, bigDictionary);
}
Dictionary<string, TestClass> outDict = null;
using (var file = System.IO.File.OpenRead("test.temp"))
{
outDict = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种整洁/干净的方式来将字符串列表存储到C#设置文件中.据我所知,你不能将List对象存储到这些设置中,所以基本上它需要转换为字符串.例如,假设我有一个名单:
即我试图展示一个可能包含任何字符的名称列表.有没有人有任何建议的整洁格式+正则表达式阅读它可以处理任何字符?或者可能是一种简单的序列化方法List<string>?
目前,我将它们保存为一个简单的命令分隔字符串,只要您小心使用名称(不能有逗号),它就可以正常工作,但注定要分解该行.
鉴于以下代码,
[DataContract]
public class TestClass
{
[DataMember]
public object _TestVariable;
public TestClass(object value)
{
_TestVariable = value;
}
public void Save()
{
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(new FileStream("test.tmp", FileMode.Create)))
{
DataContractSerializer ser = new DataContractSerializer(typeof(TestClass));
ser.WriteObject(writer, this);
}
}
}
public enum MyEnum
{
One,
Two,
Three
}
Run Code Online (Sandbox Code Playgroud)
当_TestVariable设置为Enum值时,为什么无法序列化?
new TestClass(1).Save(); // Works
new TestClass("asdfqwer").Save(); // Works
new TestClass(DateTime.UtcNow).Save(); // Works
new TestClass(MyEnum.One).Save(); // Fails
Run Code Online (Sandbox Code Playgroud)
抛出的异常是:
System.Runtime.Serialization.SerializationException : Type 'xxx.MyEnum' with data contract name 'xxx.MyEnum:http://schemas.datacontract.org/2004/07/Tests' is not expected. …Run Code Online (Sandbox Code Playgroud)