小编tan*_*ius的帖子

C#好友类/元数据和反思

我试图使用反射来检查给定类上的属性是否设置了ReadOnly属性.我使用的类是MVC视图模型(使用元数据的部分"伙伴"类.

 public partial class AccountViewModel  
{
    public virtual Int32 ID { get; set; } 
    public virtual decimal Balance { get; set; }    

} 
[MetadataType(typeof(AccountViewModelMetaData))]
public partial class AccountViewModel  
{
    class AccountViewModelMetaData
    {
        [DisplayName("ID")]
        public virtual Int32 ID { get; set; }

        [DisplayName("Balance")]
        [DataType(DataType.Currency)] 
        [ReadOnly(true)]
        public virtual decimal Balance { get; set; }

    }
}
Run Code Online (Sandbox Code Playgroud)

我想检查"Balance"是否具有ReadOnly属性.如果我在AccountViewModel的Balance属性上设置ReadOnly属性,我可以这样检索它:

Type t = typeof(AccountViewModel);
PropertyInfo pi = t.GetProperty("Balance");  
bool isReadOnly =  ReadOnlyAttribute.IsDefined(pi,typeof( ReadOnlyAttribute);
Run Code Online (Sandbox Code Playgroud)

如果它位于元数据类中,我无法检索属性信息.如何检查属性是否存在?我为所有视图模型定义了元数据类,并且需要通用的方法来检查元数据类的属性.

有什么建议?

.net c# reflection attributes

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

如何监控重要的工作者线程

我有一个对我的应用程序至关重要的工作线程.
它创建时new Thread( method ).Start();我不加入它,我只是希望只要我的程序运行就会运行.
但是,可能会发生此线程上发生异常; 并且作为一个结果,线程将(除了一些最后的日志记录)关闭.此严重错误无法恢复.由于线程对于应用程序至关重要,因此它也必须关闭.

现在我的问题是:我如何监控线程的状态?

你会

  • 民意调查IsAlive
  • 重新抛出捕获的异常并使用AppDomain.CurrentDomain.UnhandledException
  • 实现一个event会发出后台线程结束的信号?
  • 用a BackgroundWorker,哪个实现RunWorkerCompleted(但是对于长时间运行的线程,BackgroundWorker真的是正确的选择吗?)
  • 一些完全不同的东西?

编辑:
现在,我通过调用Application.Exit()- > 早期和经常崩溃来解决问题.这也是一个选择:)

c# multithreading

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

字段和属性C#中的最佳实践

亲爱的,哪一个是使用C#的最佳实践,为什么?
1.

private string name;

public string Name
{
  get { return name; }
  set { name = value; }
}
Run Code Online (Sandbox Code Playgroud)

2.

public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

3.

protected string name;
public string Name
{
  get { return name; }
  set { name = value; }
}
Run Code Online (Sandbox Code Playgroud)

请加上......

c# c#-3.0

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

如何使用抛出InvalidOperationException的计时器更改标签内容

我正在创建一个应用程序,我正在该应用程序中使用计时器来更改WPF C#.NET中的标签内容.

在计时器已过去的事件中,我正在编写以下代码

lblTimer.Content = "hello";
Run Code Online (Sandbox Code Playgroud)

但它抛出一个InvalidOperationException并给出一条消息调用线程无法访问此对象,因为另一个线程拥有它.

我正在使用.NET framework 3.5和WPF与C#.

请帮我.
提前致谢.

.net c# wpf multithreading timer

4
推荐指数
1
解决办法
9114
查看次数

在无限序列生成期间删除元素

我找到了一个很好的haskell解决方案(源码)来生成Hofstadter序列:

hofstadter = unfoldr (\(r:s:ss) -> Just (r, r+s:delete (r+s) ss)) [1..]
Run Code Online (Sandbox Code Playgroud)

现在,我也试图在F#中编写这样的解决方案.不幸的是(我对F#并不熟悉)到目前为止我没有成功.

我的问题是,当我sequence在F#中使用时,似乎无法删除元素(就像在haskell解决方案中完成的那样).
其他数据结构等arrays,list或者set其允许除去元件不产生无限序列,但仅在某些元素进行操作.

所以我的问题:在F#中是否可以生成无限序列,其中元素被删除?

到目前为止我试过的一些东西:

无限的数字序列:

let infinite =
    Seq.unfold( fun state -> Some( state, state + 1) ) 1
Run Code Online (Sandbox Code Playgroud)

Hofstadter序列 - 不工作,因为没有del关键字,并且有更多的语法错误

let hofstadter =
    Seq.unfold( fun (r :: s :: ss) -> Some( r, r+s, del (r+s) ss)) infinite
Run Code Online (Sandbox Code Playgroud)

我想过使用Seq.filter,但也找不到解决方案.

f# haskell data-structures

4
推荐指数
1
解决办法
441
查看次数

如何发出委托或lambda表达式

我想发出一个返回Func <>的方法.在这个方法中,我必须创建一个委托或lambda表达式,它完全服务于返回类型.

它应该看起来像这样:

// I have a resolve method that will be called inside my missing method
// This is it's signature:
object Resolve( params object[] args);

// This is how I use it:
var barFactory = ( Func<IBar> )MissingMethod( typeof( IBar ) );
var bar = barFactory.Invoke();

// or - with one string argument:
var fooFactory = ( Func<string, IFoo> )MissingMethod( typeof( IFoo ), typeof( string ) );
var foo = fooFactory.Invoke( "argument for foo" );
Run Code Online (Sandbox Code Playgroud)

在MissingMethod()内部,它应该如下所示:

object MissingMethod( …
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates reflection.emit

3
推荐指数
1
解决办法
2392
查看次数

单一模式与公共构造函数

public class MySingletonClass
{
  public MySingletonClass()
  {
    _mySingletonObj = Instance();
  }

  public static MySingletonClass Instance()
  {
    if (_mySingletonObj  == null)
    {
      lock (typeof(lockObject))
      {
        if (_mySingletonObj  == null)
          _mySingletonObj  = new MySingletonClass();
      }
    }
    return _mySingletonObj ;
  }
}

MySingletonClass _myObj = new MySingletonClass();
Run Code Online (Sandbox Code Playgroud)

这个作为公共建设者的单身人士......?

谢谢

c# singleton

3
推荐指数
1
解决办法
7256
查看次数

电子邮件地址长度验证的正则表达式

我们有一个文本框,接受逗号分隔的电子邮件地址.正则表达式是

^(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*[,]?\b)*$.

但是现在我无法为此表达式添加长度验证.每个电子邮件地址不得超过150个字符.我试过了

^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)){1,150}\s*[,]?\b)*$. 

但它不起作用.你能否修改正则表达式,以便它也实现这个验证.

regex

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

Berkeley DB Java版 - 调整大量数据

我需要将超过10亿个密钥加载到Berkley DB中,因此我想提前调整它以获得更好的性能.使用标准配置,我现在花了大约15分钟加载1'000'000键,这太慢了.是否有适当的方法来调整例如Berkley DB的B + Tree(节点大小等...)?

(作为比较,在调整tokyo cabinet之后,它在25分钟内加载10亿个键).

PS我正在寻找调优技巧作为代码而不是为运行系统设置的参数(如jvm size等...)

performance berkeley-db-je

3
推荐指数
1
解决办法
3895
查看次数

在VS2010中将多个解决方案组合到一个解决方案中

我有一个解决方案文件,其中包含以下示例项目:SharedLibrary NonSharedLibrary WebProject WebProject.Install

然后是另一个具有以下示例项目的解决方案文件:SharedLibrary WindowsServiceProject WindowsServiceProject.Install

目前我在两个独立的VS2010实例中打开.共享库在两者中都相同,但通过我的源代码控制共享.有没有一种简单的方法来创建另一个解决方案文件,打开时,打开所有必要的项目.然后在测试等时,您只需更改启动项目.

如果你只想在其中一个解决方案上工作,那么一直保持打开旧解决方案的能力.

有没有人这样做过和/或知道一个好的方法?

visual-studio-2010

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