小编Ste*_*uer的帖子

如果一个对象的内容具有相同的接口,可以动态地将其复制到另一个对象吗?

例如,如果我有两个对象,一个是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这样的类......任何聪明的人都有想法?

谢谢,斯蒂芬

.net c#

5
推荐指数
3
解决办法
4508
查看次数

当我只知道祖先类的类型时,如何反序列化XML?

让我们假设我想反序列化这个(我删除了名称空间以使事情变得更简单):

<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'......"

.net c# datacontractserializer xml-deserialization

5
推荐指数
1
解决办法
359
查看次数

在WinForms中,如何在DevExpress GridControl中创建删除按钮?

我正在尝试在DevExpress GridControl中每一行的右侧创建一个删除按钮,如下所示:

在此处输入图片说明

我所做的是添加了另一列,并将其ColumnEdit属性设置为RepositoryItemButtonEdit的实例。我处理ButtonClick事件,以删除一行。

我可以从以下代码确定我所在的行:

myGridView.GetRow(myGridView.FocusedRowHandle);
Run Code Online (Sandbox Code Playgroud)

因为我不想在按钮上使用文本编辑器,所以将TextEditStyle设置为HideTextEditor。

默认情况下,该按钮显示省略号。

为了删除省略号,我调整了RepositoryItemButtonEdit上的Buttons属性。我将种类设置为字形,并将图像设置为我的X图标。

不幸的是,这似乎只是完全删除了按钮。

有谁知道在每个网格行中执行此操作的更好方法,或显示带有图像的按钮的方法?

.net c# devexpress winforms

5
推荐指数
1
解决办法
1万
查看次数

我在哪里将ImplicitlyExpandDesignTimeFacades设置为false?

我有这里提到的问题.

我收到错误:

已导入具有相同标识的程序集"System.Runtime.Serialization.Primitives,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a".尝试删除其中一个重复的引用.

问题似乎是Visual Studio 2013,Newtonsoft.JsonSystem.Runtime.Serialization.Primitives之间不兼容.

建议的工作是添加

<ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades>
Run Code Online (Sandbox Code Playgroud)

从环顾网络看来,这似乎需要进入.csproj文件,但我不确切知道放在哪里.如果我把它放在根节点下,我会收到错误.有任何想法吗?

.net c# json.net visual-studio-2013

5
推荐指数
2
解决办法
2363
查看次数

使用OleDBDataReader从Access数据库中选择备注字段时,它只返回字符串的一部分.我怎样才能获得整个字符串?

这是我的代码:

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个字符.显然,我需要字符串中的所有字符.

有人知道怎么修这个东西吗?

谢谢 :)

.net c# ms-access oledbdatareader

3
推荐指数
1
解决办法
3232
查看次数

在HTML中,如何在IE8中获取输入框?

我已将以下简单的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中的完全相同的行为,即左右锚点的行为.这意味着拉伸不是固定的百分比.

html firefox internet-explorer internet-explorer-8

3
推荐指数
1
解决办法
4437
查看次数

如何在调试时在Visual Studio 2008中查看解决方案资源管理器?

这可能是一个非常简单的问题,但我花了太多时间寻找答案,所以我在这里提出我的问题:

每当我在Visual Studio 2008中运行应用程序时,我的解决方案资源管理器都会消失...有关如何找到它的任何建议吗?

谢谢 :)

visual-studio-2008 visual-studio

3
推荐指数
1
解决办法
4494
查看次数

如何使用DevExpress WinForms TextEdit作为密码条目(带星号)?

根据http://www.devexpress.com/Products/NET/Controls/WinForms/Editors/editors/textEdit.xml,可以使用Developer Express TextEdit控件输入密码并隐藏字符.任何人都可以向我解释如何做到这一点?看起来它应该非常简单.

.net c# devexpress winforms

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

为什么Microsoft.Build.Evaluation在64位PC上将$(ProgramFiles)评估为"c:\ program files"?

我有一个C#项目文件(.csproj),其中包含对$(ProgramFiles)的引用.我使用64位Windows 7.当我在Visual Studio 2010中编译此项目文件时,它在c:\ Program Files(X86)中正确定位文件.

如果我试图聪明而改为使用Microsoft.Build.Evaluation.ProjectCollection.LoadProject([project file]),试图在代码中构建它,它会错误地将$(ProgramFiles)计算为c:\ Program Files.

知道问题的原因是什么吗?

.net c# windows msbuild visual-studio-2010

2
推荐指数
1
解决办法
298
查看次数

为什么NUnit期望使用较旧版本的框架?

这是我第一次尝试使用NUnit。我已经使用NuGet将NUnit安装到Visual Studio项目中。如您在下图中所看到的,它引用了版本2.6.1.12217的nunit.framework ...

Visual Studio项目

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

Windows应用程式

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

加载失败

...但是由于某些原因,它期望使用nunit.framework的2.5.10.11092版本。

知道我做错了什么吗?

.net nunit unit-testing visual-studio-2010

2
推荐指数
1
解决办法
6123
查看次数

提交OData Edm.Decimal类型时为什么会出错?

我正在尝试向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'时遇到错误,这是属性的预期类型.

如果您需要更多信息,请与我们联系.

谢谢,斯蒂芬

javascript json wcf-data-services odata

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

在C#中,如何处理当前队列中的所有RabbitMQ消息?

基本的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)

我想要做的是检索已放入队列然后停止的所有消息.

以下两个例子可以解决我的问题

  1. 如果我在下午1点启动我的代码,我想处理下午1点之前放在队列中的所有消息.

要么

  1. 如果我在13:00:00启动我的代码,并且我的代码运行需要10秒,我不介意它是否包括在13:00:00和13:00:10之间放置在队列中的消息,如一旦队列为空,它就会停止.

我意识到我可以在我的消息中加上时间戳并检查它,或者我可以设置超时值,但我想知道是否有任何内置的方法来正确地执行此操作.

提前致谢.

.net c# rabbitmq

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