小编Mat*_*ero的帖子

非可空类型的通用约束

我有以下课程:

public class KeyDTO<T>
{
     public T Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但我希望类型参数T是一个非可空类型.我在某处读过这可能是可行的:

public class KeyDTO<T> where T : IComparable, IComparable<T>
{
     public T Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我public T Id改为public T? Id,我会收到编译错误,告诉我T必须是不可为空的.

如何指定泛型类型参数必须是非可空的?

编辑

我想完成这个,因为我想Id[Required]属性注释我的属性,如下所示:

public class KeyDTO<T> {
    [Required]
    public T Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

什么[Required]是验证模型,因此T不能为空.

但是,如果我有KeyDTO<int>,Id将被初始化为0,绕过我的[Required]属性

.net c# generics types interface

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

将Func转换为Delegate

我定义了以下委托:

public delegate object MyDelegate(dynamic target);
Run Code Online (Sandbox Code Playgroud)

我有一个Func<dynamic, object>对象:

Func<dynamic, object> myFunc
Run Code Online (Sandbox Code Playgroud)

我怎样才能转换myFuncMyDelegate

我试过这些说明,但都没有奏效:

MyDelegate myDeleg = myFunc;
MyDelegate myDeleg = (MyDelegate) myFunc;
MyDelegate myDeleg = myFunc as MyDelegate;
Run Code Online (Sandbox Code Playgroud)

.net c# delegates dynamic c#-4.0

11
推荐指数
1
解决办法
4806
查看次数

复杂的字符串拆分

我有一个像下面这样的字符串:

[Testing.User]|Info:([Testing.Info]|Name:([System.String]|Matt)|Age:([System.Int32]|21))|Description:([System.String]|This is some description)
Run Code Online (Sandbox Code Playgroud)

您可以将其视为此树:

- [Testing.User]
- Info
        - [Testing.Info]
        - Name
                - [System.String]
                - Matt
        - Age
                - [System.Int32]
                - 21
- Description
        - [System.String]
        - This is some description
Run Code Online (Sandbox Code Playgroud)

如您所见,它是类的字符串序列化/表示 Testing.User

我希望能够进行拆分并在结果数组中获取以下元素:

 [0] = [Testing.User]
 [1] = Info:([Testing.Info]|Name:([System.String]|Matt)|Age:([System.Int32]|21))
 [2] = Description:([System.String]|This is some description)
Run Code Online (Sandbox Code Playgroud)

我不能分开,|因为这会导致:

 [0] = [Testing.User]
 [1] = Info:([Testing.Info]
 [2] = Name:([System.String]
 [3] = Matt)
 [4] = Age:([System.Int32]
 [5] = 21))
 [6] = Description:([System.String]
 [7] = This is some description)
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到预期的结果?

我对正则表达式不太满意,但我知道这是一个非常可能的解决方案.

c# regex string parsing split

11
推荐指数
2
解决办法
1009
查看次数

当前上下文中不存在名称"$ exception"

今天我在我的工作中调试了一个应用程序.我继续在我的一个catch块中设置断点,以便更详细地检查异常.

View Detail模式窗口正常打开,但不是我展示了异常的细节,它抛出一个奇怪的错误,一个我从来没有,我也知道这意味着什么:

查看详细信息例外

错误说:

当前上下文中不存在名称"$ exception"

这令人沮丧,因为我在catch块范围内,所以我应该能够看到我的异常.

重新启动我的应用程序后,我设法调试它就好了.这是唯一一次(到目前为止)我收到此错误.

有谁知道这意味着什么以及如何解决它(无需重启应用程序)?

注意:我使用的是Visual Studio 2012 Premium.版本11.0.61030.00更新4

.net c# debugging exception visual-studio-2012

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

为什么PLINQ慢于循环?

假设我有这两种方法:

public BigInteger PFactorial(int n)
{
    return Enumerable.Range(1, n)
                     .AsParallel()
                     .Select(i => (BigInteger)i)
                     .Aggregate(BigInteger.One, BigInteger.Multiply);
}

public BigInteger Factorial(int n)
{
    BigInteger result = BigInteger.One;
    for(int i = 1; i <= n; i++)
        result *= i;
    return result;
 }
Run Code Online (Sandbox Code Playgroud)

以下是我得到的结果:

PFactorial(25000) -> 0,9897 seconds
Factorial(25000) -> 0,9252 seconds
Run Code Online (Sandbox Code Playgroud)

我知道PLINQ由于线程设置而有一些开销,但是如此大的n我期待PLINQ更快.

这是另一个结果:

PFactorial(50000) -> 4,91035 seconds
Factorial(50000) -> 4,40056 seconds
Run Code Online (Sandbox Code Playgroud)

c# linq task-parallel-library

10
推荐指数
1
解决办法
552
查看次数

AngularJS - 如何取消承诺?

假设我有一个输入文本字段(更像是Google搜索字段),当更改时,它会触发请求并显示一些结果.

例如,

让我们Dog在输入中输入:

typed D -> Calls ctrl.search('D') -> Makes a request -> Changes model when success
typed DO -> Calls ctrl.search('DO') -> Makes a request -> Changes model when success
typed DOG -> Calls ctrl.search('DOG') -> Makes a request -> Changes model when success.
Run Code Online (Sandbox Code Playgroud)

现在,假设DO请求的响应时间晚于响应请求DOG.DO即使我打字,我的模型也会得到结果DOG.

为此,如果我继续键入字符,我需要一种方法来取消或中止当前正在进行的请求.这样,我的模型只会被最终请求更改.

我的输入如下所示:

<input type="text" class="form-control" data-ng-model="query" data-ng-change="ctrl.search(query)" placeholder="Search" />
Run Code Online (Sandbox Code Playgroud)

这是我的searchCtrl.js:

var search;
var language;
var _this;

var SearchCtrl = function (searchService, lang) …
Run Code Online (Sandbox Code Playgroud)

javascript promise deferred angularjs

10
推荐指数
1
解决办法
4760
查看次数

Aspectj @Around切入Java中的所有方法

我正在编写一个简单的计时器方面来检测属于我的项目的所有包中的所有方法.但是,那些类中的各种方法的返回类型是不同的,我得到以下错误:

它只适用于制定者,但不适用于吸气剂......

错误:应用于不返回void的joinpoint

这是我的timeraspect......

@Around("execution(* com.myproject..*(..))")
public void log(ProceedingJoinPoint pjp) throws Throwable{


    LOG.info("TimerAspect");
    String name = pjp.getSignature().getName();
    Monitor mon = MonitorFactory.start(name);
    pjp.proceed();
    mon.stop();

    LOG.info("TimerAspect Mon" + mon);

    String printStr = mon.getLabel()+","+mon.getUnits()+","+mon.getLastValue()+","+mon.getHits()+","+mon.getAvg()+","+mon.getTotal()+","+mon.getMin()+","+mon.getMax()+","+mon.getFirstAccess()+","+mon.getLastAccess();

    File f = new File("target/stats.csv");
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(f, true));
    bufferedWriter.write(printStr);
    bufferedWriter.newLine();
    bufferedWriter.flush();
    bufferedWriter.close();


}
Run Code Online (Sandbox Code Playgroud)

任何解决这个问题的线索都非常感谢.

谢谢

java aop

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

异步SHA256哈希

我有以下方法:

public static string Sha256Hash(string input) {
    if(String.IsNullOrEmpty(input)) return String.Empty;
    using(HashAlgorithm algorithm = new SHA256CryptoServiceProvider()) {
        byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        byte[] hashBytes = algorithm.ComputeHash(inputBytes);
        return BitConverter.ToString(hashBytes).Replace("-", String.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让它异步?我希望使用asyncawait关键字,但HashAlgorithm该类不提供任何异步支持.

另一种方法是将所有逻辑封装在:

public static async string Sha256Hash(string input) {
     return await Task.Run(() => {
         //Hashing here...
     });
}
Run Code Online (Sandbox Code Playgroud)

但这似乎并不干净,我不确定它是否是一种异步执行操作的正确(或有效)方式.

我该怎么做才能做到这一点?

.net c# asynchronous sha256 async-await

9
推荐指数
2
解决办法
2001
查看次数

Bitmap.FromFile(路径)和新位图(路径)之间的区别

我想知道这两者之间的区别:

Bitmap bitmap1 = new Bitmap("C:\\test.bmp");
Bitmap bitmap2 = (Bitmap) Bitmap.FromFile("C:\\test.bmp");
Run Code Online (Sandbox Code Playgroud)

一种选择比另一种更好吗?是否Bitmap.FromFile(path)会向位图图像填充任何其他数据,或者它只是一个委托new Bitmap(path)

c# graphics image bitmap

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

处置来自同一对象的对象

我正在设计一个流畅的API,其用法有点像这样:

IUser user = work
                 .Timeout(TimeSpan.FromSeconds(5))
                 .WithRepository(c => c.Users)
                 .Do(r => r.LoadByUsername("matt"))
                 .Execute();
Run Code Online (Sandbox Code Playgroud)

所以,让我们说work是类型IUnitOfWork,但该方法WithRepository(c => c.Users)返回称为界面IActionFlow<IUserRepository>IDisposable.

当我调用Execute()并获得最终结果时,我失去了对该IActionFlow<IUserRepository>实例的引用,因此我无法处理它.

将实例自身放在Execute()方法上有什么缺点?

就像是:

public TResult Execute()
{
    // ...
    Dispose();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

代码似乎编译得很好,但我正在寻找可能因此而出现的奇怪行为或错误.这是不好的做法吗?

c# dispose fluent

9
推荐指数
1
解决办法
369
查看次数