小编Ray*_*yes的帖子

GetProperties()返回接口继承层次结构的所有属性

假设以下假设的继承层次结构:

public interface IA
{
  int ID { get; set; }
}

public interface IB : IA
{
  string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用反射并进行以下调用:

typeof(IB).GetProperties(BindingFlags.Public | BindingFlags.Instance) 
Run Code Online (Sandbox Code Playgroud)

只会产生接口的属性IB,即" Name".

如果我们要对以下代码进行类似的测试,

public abstract class A
{
  public int ID { get; set; }
}

public class B : A
{
  public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该调用typeof(B).GetProperties(BindingFlags.Public | BindingFlags.Instance)将返回PropertyInfo" ID"和" Name" 的对象数组.

有没有一种简单的方法来查找接口的继承层次结构中的所有属性,如第一个示例中所示?

.net c# reflection

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

File.Move不起作用 - 文件已经存在

我有一个文件夹:

C:\测试

我正在尝试这段代码:

File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
Run Code Online (Sandbox Code Playgroud)

我得到例外:

文件已存在

输出目录肯定存在,输入文件就在那里.

c# file-io

77
推荐指数
7
解决办法
12万
查看次数

Moq - It.IsAny <string>()始终返回null

It.IsAny<string>()在每次通话时可能导致返回null的原因是什么?假设它被设计为返回非空字符串,我是不正确的?

这是用法 - Login方法为null第二个参数(连接字符串)抛出ArgumentNullException.我假设这It.IsAny<string>()将提供一个非空字符串,它将绕过ArgumentNullException.

var mockApiHelper = new Mock<ApiHelper>();
mockApiHelper.Setup(m => m.Connect(It.IsAny<string>(), 
                                   It.IsAny<string>(), 
                                   It.IsAny<string>()));

var repositoryPlugin = new RepositoryPlugin(mockApiHelper.Object);
repositoryPlugin.Login(new CredentialsInfo(), It.IsAny<string>());

Assert.IsTrue(repositoryPlugin.LoggedIn, 
    "LoggedIn property should be true after the user logs in.");
Run Code Online (Sandbox Code Playgroud)

moq

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

使用protobuf-net的C#项目中的协议缓冲区 - 代码生成的最佳实践

我正在尝试使用protobuf-net在C#项目中使用protobuf,并且想知道将这个组织到Visual Studio项目结构中的最佳方法是什么.

当手动使用protogen工具生成C#代码时,生活似乎很容易,但感觉不对.

我希望.proto文件被认为是主要的源代码文件,生成C#文件作为副产品,但在C#编译器参与之前.

选项似乎是:

  1. 原型工具的自定义工具(虽然我看不到从哪里开始)
  2. 预构建步骤(调用protogen或批处理文件)

我一直在努力与2)上面,因为它一直给我"系统找不到指定的文件",除非我使用绝对路径(我不喜欢强制项目明确定位).

还有一个约定吗?


编辑: 基于@ jon的评论,我重新尝试了预构建步骤方法,并使用Google的地址簿示例使用了这个(protogen的位置现在硬编码):

c:\bin\protobuf\protogen "-i:$(ProjectDir)AddressBook.proto" 
       "-o:$(ProjectDir)AddressBook.cs" -t:c:\bin\protobuf\csharp.xslt
Run Code Online (Sandbox Code Playgroud)

编辑2: 考虑到@ jon的建议,如果它们没有改变就不通过处理.proto文件来最小化构建时间,我已经敲了一个基本工具来检查我(这可能会扩展到一个完整的自定义构建工具):

using System;
using System.Diagnostics;
using System.IO;

namespace PreBuildChecker
{
    public class Checker
    {
        static int Main(string[] args)
        {
            try
            {
                Check(args);
                return 0;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return 1;
            }
        }

        public static void Check(string[] args)
        {
            if (args.Length < 3)
            {
                throw new ArgumentException(
                    "Command line must be supplied with source, target and command-line [plus options]");
            }

            string …
Run Code Online (Sandbox Code Playgroud)

c# protocol-buffers protobuf-net visual-studio

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

包含名称空间的XML元素的XDocument或XElement解析

我尝试读取从log4net UdpAppender捕获的以下字符串.

<log4net:event logger="TestingTransmitter.Program" 
               timestamp="2009-08-02T17:50:18.928+01:00" 
               level="ERROR" 
               thread="9" 
               domain="TestingTransmitter.vshost.exe" 
               username="domain\user">
    <log4net:message>Log entry 103</log4net:message>
    <log4net:properties>
        <log4net:data name="log4net:HostName" value="machine" />
    </log4net:properties>
</log4net:event>
Run Code Online (Sandbox Code Playgroud)

在尝试XElement.Parse或XDocument.Parse内容时,它会抛出异常:

'log4net'是未声明的命名空间.第1行,第2位.

我知道我可以在原始字符串中搜索并替换"log4net:"并删除它,允许我成功解析XML,但是有更好的方法吗?这是捕获的完整数据(重新格式化以允许读取),没有制作或删除xml命名空间声明.

c# log4net linq-to-xml

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

多个键盘和低级挂钩

我有一个系统,我有多个键盘,真的需要知道键击来自哪个键盘.解释设置:

  1. 我有一个普通的PC和USB键盘
  2. 我有一个带有一些硬键的外部VGA屏幕
  3. 硬键映射为标准USB键盘,发送有限数量的键码(F1,F2,Return,+和 - )

我有一个低级钩子(在C#中,但实际上调用了Win32功能),即使我的应用程序没有聚焦,它也能够处理输入.

问题是当使用普通键盘时,应用程序拾取的一些映射键码在外部屏幕上被驱动.外部屏幕发送并用于确认的其中一个按键是VK_RETURN.除非我能够识别"设备"并对其进行过滤,否则用户可能正在执行操作并在甚至不看的屏幕上确认它们.

我怎么知道哪个键盘负责按键?

c# hardware keyboard hook winapi

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

如何从Web服务(WCF)公开我的集合

我有一个自定义集合,我想从WCF Web服务公开.

[DataContract( Name = "MyClass")]
public class MyCollection : IDisposable, List<MyClass> 
{
}
Run Code Online (Sandbox Code Playgroud)

当我使用[DataContract( Name = "MyClass")]属性时,它会给出错误

类型MyCollection是一种无效的集合类型,因为它具有DataContractAttribute属性.

wcf

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

Deepzoom for WPF

是否有Silverlight的MultiScaleImage(又名DeepZoom)的WPF端口?让微软对WPF进行道路映射吗?

我想从WinForms转移到WPF并需要像DeepZoom这样的东西,使用Silverlight不是一个选项.

silverlight wpf deepzoom

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

从MSBuild中查看项目依赖性

是否有模式,某些开关或编程方式,我可以要求MSBuild显示或输出给定构建文件的计算依赖项?

一些背景 - 我有一个大型项目,需要拆分以加快构建时间,并希望将缓慢变化的基础架构代码移除到它自己的发布区域.并非所有信息都包含在构建文件本身中,因为某些子项目由其vcproj或csproj文件引用.

我真的很想看看MSBuild认为需要做什么(更坏的情况[重建所有],也许是make),而不实际进行重建.

msbuild

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

SQL缓存和实体框架

我已经组建了一个小型的ASP.NET MVC 2站点,该站点执行一些非常广泛的日期挖掘/表连接/等.

使用MVC,我有一个控制器,以许多不同的形式(表,图像等)返回数据.为了节省频繁访问数据库,我有一个双缓存机制:

  1. 对于相同动作的相同参数,我使用OutputCacheAttributewith VaryByParam = "*".
  2. 假设动作的某些参数已经改变(或者调用了另一个动作),我的"数据"仍然可能先前被请求了,所以我在数据库第一次命中后将数据存储在视图模型中,我实现了这一点使用.NET 4.0 System.Runtime.Caching.ObjectCache.

ObjectCacheController内部示例:

private static readonly ObjectCache cache = 
      new MemoryCache("CompareControllerCache");
private static void CacheObject(ViewModel obj, 
                                string param1, 
                                int someOtherParam )
{
    string key = string.Format("{0}-{1}", param1, someOtherParam);
    Trace.WriteLine(string.Format("Adding {0} to the cache", key));
    cache.Add(key, obj, new CacheItemPolicy
         {
             SlidingExpiration = TimeSpan.FromMinutes(1)
         });
}

// Corresponding GetCachedObject with similar key defining logic.
Run Code Online (Sandbox Code Playgroud)

这给我带来了良好的性能提升,但失败的地方就是CacheItemPolicy非常简单.理想情况下,我希望缓存窗口更大,但如果数据库发生更改,缓存项目将会过期.

CacheItemPolicy似乎与支持这个ChangeMonitors集合,而我可以添加SqlChangeMonitor,但要建的时候这是我停下来.

我正在使用Entity Framework 4访问SQL数据库,如何构建 …

.net sql asp.net-mvc caching entity-framework

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