小编jhe*_*ngs的帖子

在C#中使用反射来获取嵌套对象的属性

给出以下对象:

public class Customer {
    public String Name { get; set; }
    public String Address { get; set; }
}

public class Invoice {
    public String ID { get; set; }
    public DateTime Date { get; set; }
    public Customer BillTo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想用反射Invoice来获得一个Name属性Customer.这就是我所追求的,假设这段代码可行:

Invoice inv = GetDesiredInvoice();  // magic method to get an invoice
PropertyInfo info = inv.GetType().GetProperty("BillTo.Address");
Object val = info.GetValue(inv, null);
Run Code Online (Sandbox Code Playgroud)

当然,由于"BillTo.Address"不是Invoice该类的有效属性,因此失败.

所以,我尝试编写一个方法将字符串拆分成句点,并遍历对象寻找我感兴趣的最终值.它可以正常工作,但我对它并不完全满意:

public Object GetPropValue(String …
Run Code Online (Sandbox Code Playgroud)

c# reflection

69
推荐指数
6
解决办法
7万
查看次数

当作为后台进程运行时,如何在mono下使用log4net FileAppender?

我在使用FileAppender单声道的log4net 时遇到了麻烦.如果我在后台生成过程(即mono MyApp.exe &),则该过程会在短时间后暂停.如果我在前台运行该进程,则记录器可以正常工作.

另一方面,如果我使用a ConsoleAppender并重定向它(即mono MyApp.exe > debug.log &),事情就好了.

这是我对应用程序的配置:

<appender name="debug-log" type="log4net.Appender.FileAppender">
  <file value="debug.log" />
  <appendToFile value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-8timestamp [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>

<appender name="console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-8timestamp [%thread] %-5level %logger - %message%newline" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="debug-log" />
</root>
Run Code Online (Sandbox Code Playgroud)

我正在使用log4net程序集的单特定版本.

编辑

单声道版本:2.10.1

我刚刚注意到另一个有趣的行为...... FileAppender只要我重定向到stdout任何地方,我就可以使用它来写入调试日志.例如,如果我使用以下内容启动我的进程:

mono MyApp.exe > /dev/null &
Run Code Online (Sandbox Code Playgroud)

该过程正常执行,写入调试日志.在这种情况下,我只使用调试日志,而不是控制台appender.使用相同的配置,当我删除重定向时,在将少量数据写入调试日志后,该进程将暂停.

mono log4net

7
推荐指数
0
解决办法
1014
查看次数

类设计:在域对象或助手类中序列化

假设我有一些域对象需要使用自定义二进制格式进行序列化/打包,以便它们可以通过套接字发送到外部进程。我的第一直觉是创建一个接口来表示可以打包成这种二进制格式的任何对象。

public interface IPackable
{
    byte[] Pack();
}
Run Code Online (Sandbox Code Playgroud)

然后我的域对象(如EntityStateVector,等)将分别实现这个接口。这类似于 .NET 和 Java 中默认序列化的工作方式。

public class Vector : IPackable
{
  public double X { get; set; }
  public double Y { get; set; }
  public double Z { get; set; }

  // other operators and methods...

  public byte[] Pack
  {
    MemoryStream stream = new MemoryStream();
    BinaryWriter writer = new BinaryWriter(stream);

    writer.Write(X);
    writer.Write(Y);
    writer.Write(Z);

    return stream.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

然而,我对设计原则了解得越多(例如 SOLID 的单一职责原则),我就越认为我应该创建一个单独的类来打包我的域对象。

我可以看到两者的优点和缺点。大家怎么看?如果答案是创建一个单独的类来打包域对象,我是否应该为每个域对象创建一个单独的打包程序(例如EntityPackerStatePacker, …

c# oop serialization

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

RSA加密AES密钥的优势

我目前正在开发一个在客户端和服务器之间传输数据的系统,并且想知道我计划使用的加密强度是多少.

我的想法是拥有一个私有/公共RSA密钥对,并将公钥分发给每个客户端(仅将私钥留在服务器上).然后,每个客户端将生成自己的AES密钥,RSA会对其进行加密.然后,他们将AES加密其数据并将加密的数据和加密的AES密钥发送到服务器.然后,服务器将使用私钥解密AES密钥,然后使用AES密钥解密数据.

是否有任何我缺少的安全漏洞和/或有更好的方法吗?

security encryption cryptography rsa aes

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

使用特定于类型的值初始化C#泛型

在以下课程中:

public class Example<T> where T : IComparable {
    private T _min;
    private T _max;

    public Example() {
        // _min = T.MinValue;
        // _max = T.MaxValue;
    }

    public Example(T min, T max) {
        _min = min;
        _max = max;
    }

    public bool Contains(T val) {
        return (val.CompareTo(_min) < 0) && (val.CompareTo(_max) > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

在默认构造函数中将成员初始化为特定于类型的最小值和最大值的最佳方法是什么?我知道这会对泛型的允许类型设置另一个约束,但这对我的目的来说很好.

此外,如果某种类型支持无限值,例如float或double,有没有办法检测到这一点并相应地设置值?

c# generics

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

在另一个列表中添加列表项

好的,我有一个类似于以下的课程......

public class Order
{
    private Guid id;
    [DataMember]
    public Guid ID
    {
        get { return id; }
        set { id = value; }
    }

    private List<Items> orderItems;
    [DataMember]
    public List<Items> OrderItems
    {
        get { return orderItems; }
        set { orderItems= value; }
    }

}

public class Items
{
    private string itemName;
    [DataMember]
    public string ItemName
    {
        get { return itemName; }
        set { itemName = value; }
    }

}
Run Code Online (Sandbox Code Playgroud)

当我在我的代码中引用时,我有一个方法,它接受一个"Order"列表作为参数.

ACME.Order newOrder = new ACME.Order();
ACME.Items newItems = new …
Run Code Online (Sandbox Code Playgroud)

c# list nested-lists

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

可以在Perl中的哈希声明中使用子例程返回值(作为数组)吗?

已经有一段时间了,为我生锈的问题道歉......

鉴于当前(工作)代码:

my @keywords = ( 'foo', 'bar', 'kan', 'moo', 'ban', 'noob' );    
my @good = grep { /oo/ } @keywords;
my @bad = grep { !/oo/ } @keywords;

my %data = (
  keywords => \@keywords,
  good => \@good,
  bad => \@bad
);

print Dumper(\%data);
Run Code Online (Sandbox Code Playgroud)

声明只是瞬态变量,以确保散列以数组引用结束.有没有办法巩固上面的方法来简单地使用哈希声明中的方法?

我试图得到类似于以下内容(非工作代码):

my @keywords = ( 'foo', 'bar', 'kan', 'moo', 'ban', 'noob' );    

my %data = (
  keywords => \@keywords,
  good => grep { /oo/ } @keywords,
  bad => grep { !/oo/ } @keywords
); …
Run Code Online (Sandbox Code Playgroud)

perl grep hashtable subroutine

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

在python中生成一个字符串列表

我是python的新手,所以我想我会试试这个快速的脚本......

给定一组输入词:即"dead","beef",如何以编程方式生成给定长度和填充字符的所有可能字符串?

结果看起来像这样(使用0长度为12 的垫):

deadbeef0000
dead0beef000
dead00beef00
dead000beef0
dead0000beef
0deadbeef000
0dead0beef00
0dead00beef0
0dead000beef
00deadbeef00
00dead0beef0
00dead00beef
000deadbeef0
000dead0beef
0000deadbeef
Run Code Online (Sandbox Code Playgroud)

生成此列表的天真方法可能是:

for x in range(0, 5):
  pre = '0' * x
  for y in range(0, 5):
    mid = '0' * y
    for z in range (0, 5):
      post = '0' * z
      val = pre + 'dead' + mid + 'beef' + post
      if len(val) == 12:
        print val
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?我已经研究itertools过组合,但无法让它产生所需的结果.

python combinations

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

Java中的重复数据删除API

Java中是否有任何重复数据删除API?我想从数据库中消除冗余项(例如重复指纹),如何通过Java编程实现?

java

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

如何确定C#应用程序中的空闲时间?

我想从我的应用程序中获取Windows空闲时间.我正在使用这个代码:

http://dataerror.blogspot.de/2005/02/detect-windows-idle-time.html

我已经在Windows 7上测试了它并且它正常工作,但我在Windows 8上只获得零.

任何想法如何解决这一问题?

.net c#

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