例如,如果我有两个对象,一个是Monkey类型,另一个是Dog类型,它们都实现了IAnimal,就像这样:
interface IAnimal
{
int numberOfEyes {get; set;}
string name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
Monkey monkey = new Monkey() { numberOfEyes = 7, name = "Henry" };
Dog dog = new Dog();
MyFancyClass.DynamicCopy(monkey, dog, typeof(IAnimal));
Debug.Assert(dog.numberOfEyes == monkey.numberOfEyes);
Run Code Online (Sandbox Code Playgroud)
我想可以用反射创建像MyFancyClass这样的类......任何聪明的人都有想法?
谢谢,斯蒂芬
让我们假设我想反序列化这个(我删除了名称空间以使事情变得更简单):
<TextField>
<Caption>Location</Caption>
<Name>Location</Name>
</TextField>
Run Code Online (Sandbox Code Playgroud)
TextField继承自FormField,因此在我的FormField类定义中看起来像这样:
[KnownType(typeof(TextField))]
[DataContract(Name = "FormField"]
public abstract class FormField
{
[DataMember]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
TextField类如下所示:
[DataContract(Name = "TextField")]
public class TextField : FormField
{
[DataMember]
public string Caption { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用这个反序列化:
internal static FormField Deserialize(string xml)
{
var serializer = new DataContractSerializer(typeof(FormField)});
using (var backing = new StringReader(xml))
{
using (var reader = new XmlTextReader(backing))
{
return serializer.ReadObject(reader) as FormField;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个SerializationException:"期待元素'FormField'......"
我正在尝试在DevExpress GridControl中每一行的右侧创建一个删除按钮,如下所示:

我所做的是添加了另一列,并将其ColumnEdit属性设置为RepositoryItemButtonEdit的实例。我处理ButtonClick事件,以删除一行。
我可以从以下代码确定我所在的行:
myGridView.GetRow(myGridView.FocusedRowHandle);
Run Code Online (Sandbox Code Playgroud)
因为我不想在按钮上使用文本编辑器,所以将TextEditStyle设置为HideTextEditor。
默认情况下,该按钮显示省略号。
为了删除省略号,我调整了RepositoryItemButtonEdit上的Buttons属性。我将种类设置为字形,并将图像设置为我的X图标。
不幸的是,这似乎只是完全删除了按钮。
有谁知道在每个网格行中执行此操作的更好方法,或显示带有图像的按钮的方法?
我有这里提到的问题.
我收到错误:
已导入具有相同标识的程序集"System.Runtime.Serialization.Primitives,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a".尝试删除其中一个重复的引用.
问题似乎是Visual Studio 2013,Newtonsoft.Json和System.Runtime.Serialization.Primitives之间不兼容.
建议的工作是添加
<ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades>
Run Code Online (Sandbox Code Playgroud)
从环顾网络看来,这似乎需要进入.csproj文件,但我不确切知道放在哪里.如果我把它放在根节点下,我会收到错误.有任何想法吗?
这是我的代码:
OleDbConnection connection = new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\Offline.accdb;Persist Security Info=False");
connection.Open();
OleDbCommand command = connection.CreateCommand();
command.CommandText = "SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE A.FormName = 'FindingNemo' AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName AND B.ID = 12 OR B.ID = 13 OR B.ID = 14 ORDER BY B.ID";
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string xml = (string)reader["XML"];
// ... do something with xml
}
Run Code Online (Sandbox Code Playgroud)
列"XML"是一个类型为memo的Access Database表列.
xml的值始终只包含XML的第一个字符.我猜它是前256个字符.显然,我需要字符串中的所有字符.
有人知道怎么修这个东西吗?
谢谢 :)
我已将以下简单的HTML代码上传到http://losthobbit.net/temp/anchor.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Anchor Test</title>
</head>
<body>
<div style="width:100%;height:100%">
<input maxlength="250" type="text" name="Text2" id="Text2" style="position: absolute;
top: 13px; left: 265px; right: 15px; height: 20px; text-align: Left">
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我已经指定了左边和右边,但没有指定宽度,以便让它伸展.
在Chrome中,它会随着浏览器的大小调整而延伸,但这在IE8或FireFox中不起作用.关于如何解决这个问题的任何想法?
谢谢
请注意,人们建议我使用宽度百分比...不幸的是它并没有解决我的问题.我想要与Chrome中的完全相同的行为,即左右锚点的行为.这意味着拉伸不是固定的百分比.
这可能是一个非常简单的问题,但我花了太多时间寻找答案,所以我在这里提出我的问题:
每当我在Visual Studio 2008中运行应用程序时,我的解决方案资源管理器都会消失...有关如何找到它的任何建议吗?
谢谢 :)
根据http://www.devexpress.com/Products/NET/Controls/WinForms/Editors/editors/textEdit.xml,可以使用Developer Express TextEdit控件输入密码并隐藏字符.任何人都可以向我解释如何做到这一点?看起来它应该非常简单.
我有一个C#项目文件(.csproj),其中包含对$(ProgramFiles)的引用.我使用64位Windows 7.当我在Visual Studio 2010中编译此项目文件时,它在c:\ Program Files(X86)中正确定位文件.
如果我试图聪明而改为使用Microsoft.Build.Evaluation.ProjectCollection.LoadProject([project file]),试图在代码中构建它,它会错误地将$(ProgramFiles)计算为c:\ Program Files.
知道问题的原因是什么吗?
这是我第一次尝试使用NUnit。我已经使用NuGet将NUnit安装到Visual Studio项目中。如您在下图中所看到的,它引用了版本2.6.1.12217的nunit.framework ...

...然后我安装了最新的Windows应用(NUnit-2.6.1.msi)。

...并尝试加载我的测试程序...

...但是由于某些原因,它期望使用nunit.framework的2.5.10.11092版本。
知道我做错了什么吗?
我正在尝试向OData服务提交一些JSON.根据$ metadata,它预计这种类型:
<Property Name="curClaimValue" Type="Edm.Decimal" Nullable="true" Precision="19" Scale="4"/>
Run Code Online (Sandbox Code Playgroud)
这是我的JSON的一部分:
...... "curClaimValue":654321 ...
这是错误消息:
处理请求流时出错.将值从请求有效负载转换为属性'curClaimValue'到类型'Decimal'时遇到错误,这是属性的预期类型.
如果您需要更多信息,请与我们联系.
谢谢,斯蒂芬
基本的RabbitMQ教程给出了如何从队列中连续检索消息的示例:
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);
Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是检索已放入队列然后停止的所有消息.
以下两个例子可以解决我的问题
要么
我意识到我可以在我的消息中加上时间戳并检查它,或者我可以设置超时值,但我想知道是否有任何内置的方法来正确地执行此操作.
提前致谢.