我有一个泛型方法,它返回泛型类型的对象.一些代码:
public static T Foo<T>(string value)
{
if (typeof(T) == typeof(String))
return value;
if (typeof(T) == typeof(int))
return Int32.Parse(value);
// Do more stuff
}
Run Code Online (Sandbox Code Playgroud)
我可以看到,编译器可能会抱怨这个("无法将类型'字符串’到'T’"),即使代码不会引起任何逻辑错误运行.有没有办法实现我正在寻找的东西?铸造无济于事......
我们最近将SonarQube服务器升级到最新版本(5.3)以及升级所有插件.服务器仅监视由Visual Studio Team Services(Visual Studio Online)构建的C#项目的单个构建.
起初,一切都运作良好(除了我将在另一个问题中描述的长期问题).但过了一段时间,我们在尝试将数据推送到SQ时开始出现类似下面的错误:
ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
at java.security.AccessController.doPrivileged(Native Method)
at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
at org.sonar.runner.api.Runner.execute(Runner.java:100)
at org.sonar.runner.Main.executeTask(Main.java:70)
at org.sonar.runner.Main.execute(Main.java:59)
at org.sonar.runner.Main.main(Main.java:53)
Caused by: java.lang.IllegalStateException: Can't create measure for line 47 for file '[PATH]/[FILENAME].cs' with 45 lines
at org.sonar.batch.sensor.coverage.CoverageExclusions.validateMaxLine(CoverageExclusions.java:158)
at org.sonar.batch.sensor.coverage.CoverageExclusions.validate(CoverageExclusions.java:129)
at org.sonar.batch.deprecated.DeprecatedSensorContext.saveMeasure(DeprecatedSensorContext.java:204)
at org.sonar.plugins.dotnet.tests.CoverageReportImportSensor.analyze(CoverageReportImportSensor.java:78)
at org.sonar.plugins.dotnet.tests.CoverageReportImportSensor.analyse(CoverageReportImportSensor.java:59)
at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:58)
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:50)
at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:98)
at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:185)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:132)
at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:117)
at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:243)
at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:238) …Run Code Online (Sandbox Code Playgroud) c# sonar-runner sonarqube sonarqube-msbuild-runner azure-devops
我喜欢C#中的泛型,但有时与它们一起工作会变得有点复杂.下面的问题我时不时地遇到.有没有办法让这个场景更简单?我看不出怎么样,但我希望有人可以:)
给出三个基类:
public abstract class Inner
{
}
public abstract class Outer<T>
where T : Inner
{
}
public abstract class Handler<TOuter, TInner>
where TOuter : Outer<TInner>
where TInner : Inner
{
public abstract void SetValue(TInner value);
}
Run Code Online (Sandbox Code Playgroud)
还有一些简单的实现:
public class In : Inner
{
}
public class Out : Outer<In>
{
}
public class HandleOut : Handler<Out, In>
{
public override void SetValue(In value) { }
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:For HandleOut,类型TInner是由"Out"类型给出的,那么是否有任何方法可以简化HandleOut类似的定义public class HandleOut : Handler<Out> …
我正在使用一个Service Fabric应用程序,我无法像希望的那样执行它.
主要问题与一个演员调用另一个演员有关.我正在记录从调用actor看到的给定调用所需的时间,并记录在接收actor上花费的时间.
我所看到的是,接收方记录工作负载需要几毫秒(最多20个).但是,调用actor会记录从50毫秒到2秒以上的任何内容.在实际逻辑运行之前,我无法解释的延迟.一旦方法返回,调用actor就会快速获得响应.
这是可以预期的吗?创建一个全新的演员实例肯定是最糟糕的 - 但是即使我在调用演员时我也会看到这种事情,我之前做过不同的调用.
传递的参数是相当基本的 - 我不怀疑反序列化是个问题.
我意识到演员将在集群内部分布,但这种规模的开销似乎不成比例.
所以,我的问题是:这是"按预期"还是表明我们做错了什么?
我将补充说,这是在一个安静的测试环境中,因此被其他请求锁定的演员不是问题.
我可以根据要求提供更多信息,但我不太确定最相关的内容.
c# ×2
generics ×2
.net ×1
azure-devops ×1
methods ×1
return-type ×1
sonar-runner ×1
sonarqube ×1