假设以下假设的继承层次结构:
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
" 的对象数组.
有没有一种简单的方法来查找接口的继承层次结构中的所有属性,如第一个示例中所示?
我有一个文件夹:
C:\测试
我正在尝试这段代码:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
Run Code Online (Sandbox Code Playgroud)
我得到例外:
文件已存在
输出目录肯定存在,输入文件就在那里.
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) 我正在尝试使用protobuf-net在C#项目中使用protobuf,并且想知道将这个组织到Visual Studio项目结构中的最佳方法是什么.
当手动使用protogen工具生成C#代码时,生活似乎很容易,但感觉不对.
我希望.proto文件被认为是主要的源代码文件,生成C#文件作为副产品,但在C#编译器参与之前.
选项似乎是:
我一直在努力与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) 我尝试读取从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#中,但实际上调用了Win32功能),即使我的应用程序没有聚焦,它也能够处理输入.
问题是当使用普通键盘时,应用程序拾取的一些映射键码在外部屏幕上被驱动.外部屏幕发送并用于确认的其中一个按键是VK_RETURN.除非我能够识别"设备"并对其进行过滤,否则用户可能正在执行操作并在甚至不看的屏幕上确认它们.
我怎么知道哪个键盘负责按键?
我有一个自定义集合,我想从WCF Web服务公开.
[DataContract( Name = "MyClass")]
public class MyCollection : IDisposable, List<MyClass>
{
}
Run Code Online (Sandbox Code Playgroud)
当我使用[DataContract( Name = "MyClass")]
属性时,它会给出错误
类型MyCollection是一种无效的集合类型,因为它具有DataContractAttribute属性.
是否有Silverlight的MultiScaleImage(又名DeepZoom)的WPF端口?让微软对WPF进行道路映射吗?
我想从WinForms转移到WPF并需要像DeepZoom这样的东西,使用Silverlight不是一个选项.
是否有模式,某些开关或编程方式,我可以要求MSBuild显示或输出给定构建文件的计算依赖项?
一些背景 - 我有一个大型项目,需要拆分以加快构建时间,并希望将缓慢变化的基础架构代码移除到它自己的发布区域.并非所有信息都包含在构建文件本身中,因为某些子项目由其vcproj或csproj文件引用.
我真的很想看看MSBuild认为需要做什么(更坏的情况[重建所有],也许是make),而不实际进行重建.
我已经组建了一个小型的ASP.NET MVC 2站点,该站点执行一些非常广泛的日期挖掘/表连接/等.
使用MVC,我有一个控制器,以许多不同的形式(表,图像等)返回数据.为了节省频繁访问数据库,我有一个双缓存机制:
OutputCacheAttribute
with VaryByParam = "*"
. System.Runtime.Caching.ObjectCache
.ObjectCache
Controller内部示例:
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数据库,如何构建 …
c# ×5
.net ×2
asp.net-mvc ×1
caching ×1
deepzoom ×1
file-io ×1
hardware ×1
hook ×1
keyboard ×1
linq-to-xml ×1
log4net ×1
moq ×1
msbuild ×1
protobuf-net ×1
reflection ×1
silverlight ×1
sql ×1
wcf ×1
winapi ×1
wpf ×1