小编cha*_*r m的帖子

有没有办法检查int是否是C#中的合法枚举?

我已经阅读了一些SO帖子,似乎缺少最基本的操作.

public enum LoggingLevel
{
    Off = 0,
    Error = 1,
    Warning = 2,
    Info = 3,
    Debug = 4,
    Trace = 5
};

if (s == "LogLevel")
{
    _log.LogLevel = (LoggingLevel)Convert.ToInt32("78");
    _log.LogLevel = (LoggingLevel)Enum.Parse(typeof(LoggingLevel), "78");
    _log.WriteDebug(_log.LogLevel.ToString());
}
Run Code Online (Sandbox Code Playgroud)

这没有例外,它很乐意存储78.有没有办法验证进入枚举的值?

c# enums

146
推荐指数
6
解决办法
5万
查看次数

引用赋值是原子的,为什么需要Interlocked.Exchange(ref Object,Object)?

在我的多线程ASMX web服务,我有我自己的类型SystemData的类别字段_allData它由数List<T>Dictionary<T>标记为volatile.系统data(_allData)会偶尔刷新一次,我会通过创建另一个被调用的对象newData并用新数据填充它的数据结构来实现.当它完成后我就分配了

private static volatile SystemData _allData

public static bool LoadAllSystemData()
{
    SystemData newData = new SystemData();
    /* fill newData with up-to-date data*/
     ...
    _allData = newData.
} 
Run Code Online (Sandbox Code Playgroud)

这应该工作,因为赋值是原子的,并且具有对旧数据的引用的线程继续使用它,而其余的在分配之后具有新的系统数据.然而,我的同事说,volatile我应该使用,而不是使用关键字和简单的InterLocked.Exchange分配,因为他说在某些平台上,不能保证引用赋值是原子的.另外:当我宣布the _allData字段volatile

Interlocked.Exchange<SystemData>(ref _allData, newData); 
Run Code Online (Sandbox Code Playgroud)

产生警告"对易变场的引用不会被视为不稳定的"我应该怎么看待这个?

c# multithreading atomicity volatility

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

如果配置错误且无事可做,退出Windows Service OnStart的正确方法是什么?

这就是我得到的:

protected override void OnStart(string[] args)
{
    if (SomeApp.Initialize())
    {
        SomeApp.StartMonitorAndWork();
        base.OnStart(args);
    }
}

protected override void OnStop()
{
    SomeApp.TearDown();
    base.OnStop();
}
Run Code Online (Sandbox Code Playgroud)

这里Initialize读取一个配置文件,如果有错,那就没什么可做的,所以服务应该停止!如果配置正常StartMonitorAndWork启动:

Timer(new TimerCallback(DoWork), null, startTime, loopTime);
Run Code Online (Sandbox Code Playgroud)

和DoWork定期轮询数据库.

如果Initialize失败(我检查日志文件),我尝试从管理工具 - >服务停止服务,我得到:

Could not stop the SomeService on Local Computer. The service did not return an error. 
This could be internal Windows error or an internal service error. 
If the problem persists, contact system administrator.
The question is: 
"Is exiting OnStart without doing nothing enough if Initialize returns false?

或者应该有这样的事情: …

c# service windows-services

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

在ASP.NET Web应用程序中创建线程的正确方法

我正在创建asmx Web服务,并且必须创建线程来执行后台IO来刷新系统数据.什么是正确的方法?我对创建线程没有任何结果感兴趣.我只是希望ASP.NET工作线程创建一个执行它加载的线程,最后进行一次分配(我认为分配_alldata = newData是原子,我自己的大结构类SystemData的两个实例)所以创建的工作线程新线程可以立即传播.

我读了一篇文章http://msdn.microsoft.com/fi-fi/magazine/cc164128%28en-us%29.aspx#S2,建议使用非线程池线程.然而,文章是关于不同/更复杂的情况,并没有帮助我这么多.

谢谢:马蒂

PS.我也问过这个问题,在asmx web服务中为数据库IO生成线程的正确方法是什么?但这个问题太复杂了.

c# asp.net multithreading

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

在处理时,没有变量的using语句会做什么?

我一直习惯使用变量和赋值.现在我喜欢这个类DbProviderConnection:

public class DbProviderConnection : IDisposable
{
    public DbConnection Connection { get; set; }
    public DbTransaction Transaction { get; set; }

    public DbTransaction BeginTransaction()
    {
        Transaction = Connection.BeginTransaction();
        return Transaction;
    } 

    //... and so on
}
Run Code Online (Sandbox Code Playgroud)

现在我想像这样使用它:

using (DbProviderConnection cnctn = _planDb.CreateOpenConnection())
{
    using (cnctn.BeginTransaction())
    {
        //...
        cnctn.Transaction.Commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:DbProviderConnection.Transaction.Dispose被叫吗?

c# transactions using-statement

22
推荐指数
2
解决办法
4933
查看次数

如何在C#/ .NET 2.0中找出字符串是否包含非字母数字字符?

允许的字符是(至少)AZ,az,0-9,ö,Ö,ä,ä,å,Å和德语,拉脱维亚语,爱沙尼亚语(如果有的话)特殊字符?有现成的方法还是我必须制作黑名单(非允许的字符)和正则表达式IsMatch?如果没有现成的如何使用黑名单?

c# regex string

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

可以在C#格式字符串中定义最大字符数,例如C printf吗?

没找到怎么做.我发现的或多或少就是这个(http://blog.stevex.net/string-formatting-in-csharp/):

除了它的对齐之外,字符串中确实没有任何格式.对齐适用于在String.Format调用中打印的任何参数.样本生成

String.Format(“->{1,10}<-”, “Hello”);  // gives "->     Hello<-" (left padded to 10)
String.Format(“->{1,-10}<-”, “Hello”); // gives "->Hello     <-" (right padded to 10)
Run Code Online (Sandbox Code Playgroud)

c# string string-formatting

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

如何在XML模式中指定必须存在两个字段中的任何一个?

我想指定要么fieldnamefreetext必须始终存在于适用于此XSD的XML文件中.有没有办法做到这一点?

<xs:complexType name="tSome">
<xs:sequence>
  <!-- either one of the two below has to be present. -->
  <xs:element name="fieldname" type="xs:string" />
  <xs:element name="freetext" type="xs:string" />
  <!-- this one below must always be present -->
  <xs:element name="dbtablename" type="xs:string" />
</xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

xsd

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

使用C#类只有静态方法而没有变量时会出现并发问题吗?

我是否正确理解所有线程都在自己的堆栈中具有方法变量的副本,因此从不同的线程调用静态方法时不会出现问题?

c# concurrency multithreading

12
推荐指数
2
解决办法
5121
查看次数

如何在WPF DataGrid中处理组小计和目标行?

我正在实现一个包含许多关键值的项目的WPF DataGrid.项目按项目类别分组.

对于每个类别,应该有:

  1. 在每个关键值列中显示该列的所有行的总和的行.
  2. 绑定到的数据源网格中不属于目标行的目标行.目标行告诉每一列当年的目标是什么(例如,要花多少钱).

这些行应始终位于每个组的顶部(排序过滤).

我的第一个解决方案是将这些数据放在组头中.这不是一个好的解决方案,因为组头不支持列.即它应该通过获得列宽来构造.

这可以做到,但当用户想要重新排序和隐藏列时,它会变得复杂.

DataGrid使用的是CollectionViewSource,因此它没有填充C#代码.基本上我正在扩展这个例子:http://msdn.microsoft.com/en-us/library/ff407126.aspx

谢谢和最诚挚的问候 - matti

c# wpf datagrid wpfdatagrid

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