小编Avn*_*tan的帖子

通过反射调用带有可选参数的方法

我可以使用Type.InvokeMember通过反射来调用方法,并且它看起来非常健壮,例如处理param数组参数.但由于某种原因,它不处理可选参数.

是否有更好的内置方法来调用考虑可选参数的方法(可能使用DLR)?

.net c# reflection optional-parameters

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

反序列化DataContract/Serializable mish-mash时的可选属性

我有一个现有的代码库,它将几个简单的类保存到磁盘上NetDataContractSerializer,但遗憾的是,这些类没有用[DataContract],而是用[Serializable].这工作正常,但现在我想为持久化类添加一些新属性,同时仍然能够读取旧版本生成的文件.

让我们说这是班级:

[Serializable]
public class Persisted
{
    public int OldProperty {get;set;}
    public int NewProperty {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,当我反序列化旧文件时,我得到一个异常,因为它们不包含NewProperty.这是有道理的.所以我想NewProperty忽略,但是虽然有一个[OptionalField]属性让序列化程序忽略缺少的字段,但它不能应用于属性 - 仅字段.

所以我想我会使用[DataContract][DataMember],它也有一个IsRequired属性,但这会改变序列化文件的布局,而且它无法读取旧的数据文件.此外,你不能混用[Serializable][DataMember]-如果串行看到[Serializable]属性,它忽略了[DataMember]指令.

因此,除非选择对旧文件进行一次性转换(可能,但不是我的第一选择),有没有办法让NetDataContractSerializer忽略现有XML序列化对象中的字段?

c# serialization netdatacontractserializer

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

使用Java中的多维数组的Foreach

我读了Java:The Complete Reference(第9版).在字符5:控制语句 - 迭代多维数组部分写:

for的增强版本也适用于多维数组.但请记住,在Java中,多维数组由数组数组组成.(例如,二维数组是一维数组的数组.)这在迭代多维数组时很重要,因为每次迭代都会获得下一个数组,而不是单个元素.此外,for循环中的迭代变量必须与所获得的数组类型兼容.例如,在二维数组的情况下,迭代变量必须是对一维数组的引用.通常,当使用for-each迭代N维的数组时,获得的对象将是N-1维的数组.要了解这一点的含义,请考虑以下程序.它使用嵌套for循环以行顺序从第一个到最后一个获取二维数组的元素.

我无法理解为什么"迭代N维的数组,获得的对象将是N-1维的数组".这是真的吗?

java

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

linq不会迭代列表

我写了以下代码

List<Pupils> pupils = PupilsDAO.SelectDAO();
XElement dtpupil = new XElement("DtDatas",
                from xlist in pupils
                orderby xlist.Id
                    select new XElement("DtData",
                        new XElement("ref", xlist.Id),
                        new XElement("forename", xlist.Forename),
                        new XElement("surname", xlist.Surname)
                    )
            );
Run Code Online (Sandbox Code Playgroud)

我没有为列表中的每个元素获取不同的XML对象,而是为列表中的每个项目获取输出,但它们都是相同的而不是实际迭代,所以只需加载...

<DtDatas>
   <DtData>
      <ref>01</ref>
      <forename>joe</forename>
      <surname>bloggs</surname>
   </DtData>
 <DtData>
      <ref>01</ref>
      <forename>joe</forename>
      <surname>bloggs</surname>
   </DtData>
 <DtData>
      <ref>01</ref>
      <forename>joe</forename>
      <surname>bloggs</surname>
   </DtData>
 <DtData>
      <ref>01</ref>
      <forename>joe</forename>
      <surname>bloggs</surname>
   </DtData>
</DtDatas>
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?我是不是要为列表添加迭代?

.net c# linq linq-to-xml

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