小编Cas*_*sen的帖子

在c#中获取字段的名称

鉴于此类:

public class MyClass
{
    public int MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我如何能够提取MyProperty代码的名称?

例如,我可以像这样得到类的名称

typeof(MyClass).Name
Run Code Online (Sandbox Code Playgroud)

我该如何为该领域做类似的事情?

问题的原因是我希望这个特定的代码能够抵抗名称的重构.

编辑:有耐力我的意思是我希望呼叫站点的代码在字段名的变化面前是健壮的.我有一些使用字段名称的字符串表示的东西.对不起的措辞很糟糕.我没有包含呼叫站点代码以保持问题清洁,而不是徘徊在有关呼叫站点代码性质的其他讨论中.

c# reflection

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

如何解决或删除此Visual Studio资源警告?

任何人都可以在这里帮助我们 - 我们已经有几个月的这个错误,并有很多人去除它,但我们仍然想知道为什么它在那里或如何删除它.如何解决或删除此警告?

警告351自定义工具"GlobalResourceProxyGenerator"与文件"App_GlobalResources\GridLocalization.bg-BG.resx"关联,但在项目中找不到自定义工具的输出.您可以尝试通过右键单击解决方案资源管理器中的文件并选择"运行自定义工具"来重新运行自定义工具.

visual-studio-2010

13
推荐指数
2
解决办法
5820
查看次数

当我加载的另一个AppDomain抛出未处理的异常时,我可以隔离当前的AppDomain吗?

可能是以下副本:我可以阻止其他AppDomain中未捕获的异常关闭应用程序吗?

一直在努力找出这个问题的答案.

只是想确保答案确实没有,在我扔掉所有代码之前,我将其驱动程序隔离在他们独立的应用程序域中并用旧式流程替换它.

所以正式的问题是这个.

我有一个默认域名"ad-default",我在其中创建了一个新的appdomain"ad-hosted",我可以避免"ad-hosted"中未处理的例外情况会删除"ad-default"吗?

我知道我可以通过连接到"广告托管"域的UnhandledException事件来观察异常,但我找不到阻止它们传播到"ad-default"域的方法.

这是真的吗?但是,如果他们不提供隔离,为什么我们甚至会想要AppDomain呢?

编辑:遗憾的是答案没有,请参阅此答案进行解释: AppDomain,处理异常

.net c# appdomain

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

通过 MSMQ 绑定的 WCF。如何检测消息何时移至毒害队列?

我正在运行通过 MsmqBinding 调用 WCF 服务的 WCF 客户端。框架是 .Net 4.0,客户端和服务器运行在 Windows Server 2008 R2 上。通道队列是事务性的。

该服务使用以下绑定参数托管: receiveErrorHandling="Move" receiveRetryCount="3" retryCycleDelay="00:00:20" maxRetryCycles="5"

鉴于 ((ReceiveRetryCount+1) * (MaxRetryCycles + 1)) 有效,这将导致任何给定消息在移动到毒子队列之前进行 4*6 = 24 次重试。

将 IErrorHandler 附加到我的服务,我注意到在 wcf 子系统最终将消息移动到 ;poison 子队列之前,总共使用 MsmqPoisonMessageException 调用了 HandleError 6 次(对于有害消息)。

我想记录消息重试完成并将消息移至毒害队列的准确时间。在我看来,唯一的选择是计算某个消息出错的次数,并将此计数与绑定 MaxRetryCycles 进行比较。这很尴尬而且容易出错。

我的问题是:

  • 我有什么方法可以最终检测到 wcf 子系统将消息移动到毒物队列的事件吗?

我的参考资料是:http : //msdn.microsoft.com/en-us/library/aa395218.aspx

和:http : //consultingblogs.emc.com/simonevans/archive/2007/09/17/A-comprehensive-guide-to-using-MsmqIntegrationBinding-with-MSMQ-3.0-in-WCF.aspx

wcf msmq msmqbinding

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

在c#中抛出异常,守卫

我今天讨论了重构这个问题(#1)

public void MyFunc(object myArgument)
{
    if(myArgument == null)
        throw new ArgumentNullException("myArgument");
....
Run Code Online (Sandbox Code Playgroud)

有了这个(#2)

//inside a shared assembly in a class called Guard
public static void AgainstArgumentNull(object obj, string message)
{
    if (obj == null)
        throw new ArgumentNullException(message);
}

public void MyFunc(object myArgument)
{
    Guard.AgainstArgumentNull(myArgument, "myArgument");
....
Run Code Online (Sandbox Code Playgroud)

我的直觉是#1更好,原因如下:

  1. #1比#2更简单,因为它不需要熟悉Util库,只需要基本的c#知识
  2. #1不会删除resharper重命名传递给ArgumentNullException构造函数的字符串的能力.
  3. #2将增加代码的依赖关系(必须能够访问包含dll的dll)
  4. #2的堆栈跟踪与#1的堆栈跟踪不同

我的问题是:我的直觉是否正确?在某些情况下,我们从另一个程序集中抛出异常的事实可能不会成为问题吗?

c# exception

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

(无效方式)避免C#中的双重检查锁

这是避免双重检查锁的有效且优化的方法:

public class SomeBaseClass
{
     protected static object InitializeLock = new object();
     protected static bool IsInitialized = false;

     public void SomeFunction()
     {
         if (!IsInitialized)
         {
             System.Threading.Thread.MemoryBarrier();
             lock (InitializeLock)
             {
                 // do init stuff
                 IsInitialized = true;
             }
     }

     //Do stuff that have to happen when function is called
    }
}
Run Code Online (Sandbox Code Playgroud)

这是双重检查的选择:

public class SomeBaseClass
{
     protected static object InitializeLock = new object();
     protected static bool IsInitialized = false;

     public void SomeFunction()
     {
         if (!IsInitialized)
         {
             lock (InitializeLock)
             {
                 if (!IsInitialized) …
Run Code Online (Sandbox Code Playgroud)

c# multithreading locking

3
推荐指数
2
解决办法
413
查看次数