我知道匿名函数不支持作为动态方法调用的参数..NET 4.0中DLR的其他此类限制是什么?
此代码段来自深度中的C#
static bool AreReferencesEqual<T>(T first, T second)
where T : class
{
return first == second;
}
static void Main()
{
string name = "Jon";
string intro1 = "My name is " + name;
string intro2 = "My name is " + name;
Console.WriteLine(intro1 == intro2);
Console.WriteLine(AreReferencesEqual(intro1, intro2));
}
Run Code Online (Sandbox Code Playgroud)
上面代码片段的输出是
True
False
Run Code Online (Sandbox Code Playgroud)
当main方法改为
static void Main()
{
string intro1 = "My name is Jon";
string intro2 = "My name is Jon";
Console.WriteLine(intro1 == intro2);
Console.WriteLine(AreReferencesEqual(intro1, intro2));
}
Run Code Online (Sandbox Code Playgroud)
上面代码片段的输出是
True
True …Run Code Online (Sandbox Code Playgroud) 在我以前的关于使用LINQ动态建立字符串(WHERE子句)和使用它们的问题之一,我被引向LINQ动态查询库动态LINQ.
第一个问题是它只适用于IQueryable,但是这可以通过在任何IEnumerable上使用.AsQueryable()扩展方法来克服.
我遇到的问题是Dynamic LINQ在我的Dictionary上寻找一个名为"CustomerID"的属性(或者传递给动态linq的字符串谓词的任何东西).由于词典只有键和值,这显然不起作用.
因此,我认为我很聪明,我创建了一个扩展类: Dictionary<string, object>ICustomTypeDescriptor`.
这允许我覆盖GetProperties()类型.哪个好.我现在可以迭代Dictionary键并将它们添加到PropertyDescriptorCollection返回的内容中.
但后来我遇到了另一个问题.在整个Dynamic LINQ库中,它们使用"Expression instance",它只包含一个Type.但是对于我的CustomTypeDescriptor工作解决方案,我需要一个实际的Type实例,然后才能申请TypeDescriptor.GetProperties(instance, false).
所以得到实际的问题.考虑到上述所有信息,如果数据存储在具有键值对的字典中,如何将字符串格式"CustomerID = 1234 AND Quantity> = 10000"中的自定义where子句应用于LINQ查询.
我目前的解决方案是将数据转换为a DataTable并使用该.Select(query)方法.哪个有效,但我有兴趣寻找其他解决方案.特别是用于基准测试目的.
有任何想法吗?
我试图从QTP调用C#dll(使用vbscript).我尝试了很多没有成功的事情:
码:
using System;
using System.Collections.Generic;
using System.Text;
namespace st
{
public class Class1
{
public static int GetValue()
{
return 34;
}
}
}
Run Code Online (Sandbox Code Playgroud)
regasm /codebase st.dll
在QTP/vbscript中,我试过了
extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
无论QTP如何,我都非常感谢有关如何从.vbs文件调用c#dll的任何见解.
当应用程序处于活动状态时保存对web.config的更改会发生什么?我问的原因是我现在正在开发一个建立在电子商务平台之上的网站/网络应用程序.在看似随机的间隔,该网站将停止响应.应用程序池的过程是正常的(发生这种情况时没有荒谬的内存或CPU使用情况).当我对web.config做一个小改动 - 比如添加空格或删除空格,然后保存 - 该网站似乎又回来了.我想通过了解更多关于保存后的事件顺序,我可以缩小我的问题的潜在原因.
编辑:我应该提到我们在IIS 6上运行.
我在64位遇到了这个奇怪的静默异常问题.这是什么造成这种行为?我想了解为什么会出现这种情况以及推荐的解决方案是什么?
主要:
try
{
Application.Run(new Form1());
}
catch
(Exception ex)
{
MessageBox.Show("Error");
}
private void Form1_Load(object sender, EventArgs e)
{
throw new Exception("oh no!");
}
Run Code Online (Sandbox Code Playgroud) 我尝试在xml文件中保存我的应用程序中的一些元素,但是当我开始使用此代码开发它时:
public static void WriteInFile(string savefilepath)
{
XmlWriter writer = XmlWriter.Create(savefilepath);
WriteXMLFile(writer);
}
private static void WriteXMLFile(XmlWriter writer) //Write and Create XML profile for specific type
{
writer.WriteStartDocument();
writer.WriteStartElement("cmap");
writer.WriteAttributeString("xmlns", "dcterms",null, "http://purl.org/dc/terms/");
writer.WriteElementString("xmlns", "http://cmap.ihmc.us/xml/cmap/");
// writer.WriteAttributeString("xmlns","dc",null, "http://purl.org/dc/elements/1.1/");
//writer.WriteAttributeString("xmlns", "vcard", null, "http://www.w3.org/2001/vcard-rdf/3.0#");
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
}
Run Code Online (Sandbox Code Playgroud)
我发现记事本中的输出是这样的一行:
<?xml version="1.0" encoding="utf-8"?><cmap
xmlns:dcterms="http://purl.org/dc/terms/"><xmlns>http://cmap.ihmc.us/xml/cmap/</xmlns></cmap>
Run Code Online (Sandbox Code Playgroud)
我想它看起来像这样的多线:
<?xml version="1.0" encoding="utf-8"?> <cmap
xmlns:dcterms="http://purl.org/dc/terms/"><xmlns>http://cmap.ihmc.us/xml/cmap/</xmlns>
</cmap>
Run Code Online (Sandbox Code Playgroud) 如何解决这个问题; 连接已在我的功能中关闭:
SqlConnection con=new SqlConnection(@"Here is My Connection");
public void run_runcommand(string query)
{
try
{
con.Open();
SqlCommand cmd1 = new SqlCommand(query, con);
cmd1.ExecuteNonQuery();
con.Close();
}
catch (Exception ex) { throw ex; }
}
//...
try
{
string query="my query";
db.run_runcommand(query);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
Run Code Online (Sandbox Code Playgroud) 所以让我们的类在文件夹中的属性如何从它们生成.proto标记文件(以获取例如C++代码)?
我将一些大对象存储到数据库(BLOB)中。正如我所见,protobuf是序列化/反序列化BLOB的最佳候选者之一。尽管它具有二进制格式,但仍易于读取和更改其内容(字符串,整数等)。因此,无论原始的 BLOB或修改过的内容(被黑客或聪明的用户?),我都需要某种数据验证。
一种可能是在表中有一个专用字段,将其称为crc,计算BLOB的校验和并将其放在那里。但是,如果crc是BLOB本身的一部分,那会更好(在许多情况下)。
我可以在protobuf流的末尾添加额外的字节,但必须删除它们(否则反序列化器将抛出异常“无效字段blablabla”)。
我可以将protobuf流放入包装器中,但是再次打开/包装仍然是开销。
是否有一种简单便宜的方法可以在protobuf流的末尾添加某些内容,从而避免反序列化期间需要进行其他操作?在XML中,我可以添加注释。我认为protobuf中没有注释,但是如何以1或2字节的CRC为例呢?
c# ×8
.net ×4
64-bit ×1
c++ ×1
crc ×1
dictionary ×1
dll ×1
generics ×1
linq ×1
properties ×1
protobuf-net ×1
qtp ×1
types ×1
vbscript ×1
web-config ×1
xml ×1
xmlwriter ×1