我试图使用反射来检查给定类上的属性是否设置了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)
如果它位于元数据类中,我无法检索属性信息.如何检查属性是否存在?我为所有视图模型定义了元数据类,并且需要通用的方法来检查元数据类的属性.
有什么建议?
我有一个对我的应用程序至关重要的工作线程.
它创建时new Thread( method ).Start();
我不加入它,我只是希望只要我的程序运行就会运行.
但是,可能会发生此线程上发生异常; 并且作为一个结果,线程将(除了一些最后的日志记录)关闭.此严重错误无法恢复.由于线程对于应用程序至关重要,因此它也必须关闭.
现在我的问题是:我如何监控线程的状态?
你会
IsAlive
?AppDomain.CurrentDomain.UnhandledException
?event
会发出后台线程结束的信号?BackgroundWorker
,哪个实现RunWorkerCompleted
?(但是对于长时间运行的线程,BackgroundWorker真的是正确的选择吗?)编辑:
现在,我通过调用Application.Exit()
- > 早期和经常崩溃来解决问题.这也是一个选择:)
亲爱的,哪一个是使用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)
请加上......
我正在创建一个应用程序,我正在该应用程序中使用计时器来更改WPF C#.NET中的标签内容.
在计时器已过去的事件中,我正在编写以下代码
lblTimer.Content = "hello";
Run Code Online (Sandbox Code Playgroud)
但它抛出一个InvalidOperationException
并给出一条消息调用线程无法访问此对象,因为另一个线程拥有它.
我正在使用.NET framework 3.5和WPF与C#.
请帮我.
提前致谢.
我找到了一个很好的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
,但也找不到解决方案.
我想发出一个返回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) 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)
这个作为公共建设者的单身人士......?
谢谢
我们有一个文本框,接受逗号分隔的电子邮件地址.正则表达式是
^(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*[,]?\b)*$.
但是现在我无法为此表达式添加长度验证.每个电子邮件地址不得超过150个字符.我试过了
^((\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)){1,150}\s*[,]?\b)*$.
但它不起作用.你能否修改正则表达式,以便它也实现这个验证.
我需要将超过10亿个密钥加载到Berkley DB中,因此我想提前调整它以获得更好的性能.使用标准配置,我现在花了大约15分钟加载1'000'000键,这太慢了.是否有适当的方法来调整例如Berkley DB的B + Tree(节点大小等...)?
(作为比较,在调整tokyo cabinet之后,它在25分钟内加载10亿个键).
PS我正在寻找调优技巧作为代码而不是为运行系统设置的参数(如jvm size等...)
我有一个解决方案文件,其中包含以下示例项目:SharedLibrary NonSharedLibrary WebProject WebProject.Install
然后是另一个具有以下示例项目的解决方案文件:SharedLibrary WindowsServiceProject WindowsServiceProject.Install
目前我在两个独立的VS2010实例中打开.共享库在两者中都相同,但通过我的源代码控制共享.有没有一种简单的方法来创建另一个解决方案文件,打开时,打开所有必要的项目.然后在测试等时,您只需更改启动项目.
如果你只想在其中一个解决方案上工作,那么一直保持打开旧解决方案的能力.
有没有人这样做过和/或知道一个好的方法?
c# ×6
.net ×2
attributes ×1
c#-3.0 ×1
delegates ×1
f# ×1
haskell ×1
lambda ×1
performance ×1
reflection ×1
regex ×1
singleton ×1
timer ×1
wpf ×1