小编Tot*_*oto的帖子

C#捕获堆栈溢出异常

我得到一个递归调用一个抛出堆栈溢出异常的方法.第一个调用被try catch块包围,但没有捕获异常.

堆栈溢出异常是否以特殊方式运行?我可以正确捕获/处理异常吗?

注意:如果相关:

  • 主线程中没有抛出异常

  • 代码抛出异常的对象由Assembly.LoadFrom(...)手动加载.CreateInstance(...)

c# stack-overflow try-catch

110
推荐指数
8
解决办法
9万
查看次数

C#虚拟静态方法

为什么静态虚拟不可能?C#依赖还是在OO世界中没有任何意义?

我知道这个概念已被强调,但我没有找到上一个问题的简单答案.

c# generics methods virtual static

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

C#接口静态方法调用泛型

有没有一种简单的方法来实现它,如果可能的话,不需要实例化对象:

interface I
{
     static  string GetClassName();
}

public class Helper
{

    static void PrintClassName<T>() where T : I
    {
         Console.WriteLine(T.GetClassName());
    }
}
Run Code Online (Sandbox Code Playgroud)

c# generics inheritance static interface

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

C#winform检查控件是否在物理上可见

是否可以确定是否可以看到控件的至少一个像素(通过属性或可能使用事件通知).

注意:即使其他窗口隐藏了控件,我也不会寻找可以返回true的Visible属性

c# controls winforms

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

C#generics usercontrol

我想定义以下控件:

public partial class ObjectSelectorControl<T> : UserControl where T : class 
Run Code Online (Sandbox Code Playgroud)

问题是设计师无法解决这个问题.这个问题有解决方法吗?

c# generics user-controls

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

26
推荐指数
5
解决办法
7万
查看次数

缓存编译的表达式树

如何有效地缓存从表达式树编译的方法?

public void SomeToStringCalls()
{
    ToString(i => (i + 1).ToString(), 1);
    ToString(i => (i + 1).ToString(), 2);
    ToString(i => (i + 2).ToString(), 3);
    ToString(i => (i + 2).ToString(), 4);
}

private string ToString<T>(Expression<Func<T, string>> expression, T input)
{
    var method = expression.Compile();
    return method.Invoke(input);
}
Run Code Online (Sandbox Code Playgroud)

上面,每个调用都将重新编译每个表达式,即使某些表达式是相同的.我不能Dictionary<Expression<Func<T, string>>, Func<T, string>>()从表达式缓存已编译的方法,因为equals它将失败.

c# expression-trees

24
推荐指数
2
解决办法
5523
查看次数

C#BackgroundWorker的文化

我想为我的整个应用程序设置文化.我尝试了以下方法:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(wantedCulture);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(wantedCulture);
Application.CurrentCulture = CultureInfo.CreateSpecificCulture(wantedCulture);
Run Code Online (Sandbox Code Playgroud)

它适用于当前线程,但稍后我创建并启动后台工作线程.当我创建worker时,当前线程使用wantedCulture执行,但工作线程将使用我的计算机文化运行.

为整个应用程序设置文化的任何想法?

c# culture multithreading

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

C#切换lambda表达式

是否有可能在lambda表达式中进行切换?如果没有,为什么?Resharper将其显示为错误.

c# lambda expression-trees switch-statement

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

从第三方重定向log4net日志

我有第三方使用如下所示的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    <!--Others sections-->
  </configSections>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\logs\logclient.txt" />
      <appendToFile value="false" />
      <rollingStyle value="Date" />
      <maximumFileSize value="1000KB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  [%thread] %-5level %logger [%ndc] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>

</configuration>
Run Code Online (Sandbox Code Playgroud)

第三方中的代码如下所示:

LogManager.GetRepository(Assembly.GetCallingAssembly()), configFile);

LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

我希望第三方dll使用我自己的配置文件中定义的自己的appender.我该如何管理这个?

NB:

  • 第三方需要使用自己的配置文件,因为其他部分是必需的,我不能将它们添加到我的文件中
  • 我可以修改第三方配置文件,我无法修改我的

c# log4net

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