我正在探索.NET 4.0中的DynamicObject模型.应用程序是通过某种text/xml文件描述对象的应用程序,程序必须在读取该文件时创建对象.
使用DynamicObject,我们可以轻松添加成员,因为我们知道成员的名称是先验的.但是,如果我们甚至不知道要添加的成员的名称呢?有没有办法让这种动态变化?
例如,假设我需要使用成员'Property1','Property2'创建一个对象,使用'PropertyA'创建另一个对象,并使用text/XML文件描述'PropertyB'.如何根据此信息动态创建对象?
更新 我从这篇文章中得到了一些想法:http://www.codeproject.com/KB/cs/dynamicincsharp.aspx
这个实现允许我做类似以下的事情:
dynamic d = new PFDynamicChannel();
PFCouplings c = ((PFChannel)d).Coupling;
d.NewProperty = "X";
Run Code Online (Sandbox Code Playgroud)
我不想使用字典的原因是使用TryGetMember和TrySetMember方法,我可以覆盖,我可以在其中引发对程序至关重要的事件.
这样,我可以继承基类(PFChannel),但我也可以动态添加成员.但是,我的问题是我不会知道新的属性名称,直到运行时.而且,我实际上并不认为动态对象允许我动态添加新属性.如果是这种情况,我如何利用ExpandoObject来提供这种能力呢?
我有一个部署项目,不允许我安装旧版本.msi文件说首先从添加/删除程序卸载程序.这不是一个好的用户体验.我该怎么做才能让安装程序先删除软件然后安装新版本?
我正在使用C#.是否建议单元测试处理方法?如果是这样,为什么要测试这些方法呢?
我正在通过以下链接进行演练:http: //msdn.microsoft.com/en-us/library/zt39148a%28VS.80%29.aspx
我一点一点地跟着它.我成功安装了该服务,但是,当我尝试运行它时,会出现以下错误消息:
"MyNewService.Exe [5292]中发生了未处理的异常("System.Security.SecurityException").
我已经看到,对很多人来说,它有效,但有些人得到了这个例外,但我找不到答案.有没有人有想法?谢谢.
我有一个字典,其中我需要迭代并进行更改.我不能使用foreach语句,因为它有时会抛出InvalidOperationException,说在收集期间无法修改集合.
我可以使用for循环,结合Dictionary.ElementAt方法,并且我在其他类中成功使用它,但是在这个特定的类中,无法找到方法ElementAt!有任何想法吗?
我有以下XML架构:
<Courses semester="1">
<Course code="A231" credits="3">Intermediate A</Course>
<Course code="A105" credits="2">Intro to A</Course>
<Course code="B358" credits="4">Advanced B</Course>
</Courses>
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为POJO:
public class Schedule
{
public int semester;
public Course[] courses;
}
public class Course
{
public String code;
public int credits;
public String name;
}
Run Code Online (Sandbox Code Playgroud)
这里有两件重要的事情需要注意:
我如何需要注释我的对象才能让FasterXML反序列化这个xml?
我有两个字典,都具有相同的结构和顺序(一个应该是另一个的精确复制):Dictionary<int, ICustomInterface>我想检查它们是否相同使用SequenceEqual<>
首先,我将第一个字典转换为XML,然后将其读回以重新创建第二个字典.初步检查时,它们都是相同的.该ICustomeInterface对象的每个正确重写Equals方法.为了检查这一点,我迭代两个词典的元素并进行比较.他们都是平等的.
但是当我调用SequenceEqual:dictionary1.SequenceEqual(dictionary2);它返回false并且ICustomInterface对象的Equals方法永远不会被调用,它总是返回false.但是,如果我这样做:
for (i = 0; i < firstDictionary.Count; i++)
firstDictionary[i].SequenceEqual(otherSub.ItemSequence[i]);
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,每行都返回true.那么,当我简单地在字典本身上调用SequnceEqual时会发生什么?
存储接口选择的广泛接受的方式是什么,例如"不再显示此消息"设置,以及用户的任何其他特定于接口的选择?注册?设置文件?我也可以将它们存储在数据库中,因为我的程序已经可以访问一个.
编辑 我当前的程序是本地的,但是将来我想把它做成基于网络的.
我正在使用Visual Studio 2010,并在C#中编码.我有一个我在项目中使用的第三方dll.当我尝试使用特定方法时,在看似随机的场合,程序只会崩溃,没有异常抛出.会议结束.有什么方法可以追踪发生的事情吗?
假设我有两个数字,0.0001和0.00001.
当我尝试在C#中使用"e"表示法格式化它们时,我得到以下结果:
double val = 0.0001;
Console.Out.WriteLine(val.ToString("e")) //prints 1e-4
double val2 = 0.00001;
Console.Out.WriteLine(val2.ToString("e")) //prints 1e-5
Run Code Online (Sandbox Code Playgroud)
但我想格式化0.0001和0.00001以显示相同的指数,如下所示:
0.0001-> 100e-6 0.00001-> 10e-6
我怎样才能做到这一点?
c# ×7
dictionary ×2
.net ×1
.net-4.0 ×1
collections ×1
comparison ×1
crash ×1
deployment ×1
dispose ×1
double ×1
dynamic ×1
fasterxml ×1
formatting ×1
jackson ×1
java ×1
linq ×1
pojo ×1
unit-testing ×1
xml ×1