我发现C#和VB编译器在重载解析上存在差异。我不确定这是一个错误还是故意的:
Public Class Class1
Public Sub ThisBreaks()
' These work '
Foo(Of String)(Function() String.Empty) 'Expression overload '
Foo(String.Empty) 'T overload '
' This breaks '
Foo(Function(
让我们使用以下代码(jQuery的类型安全存根):
public interface IjQueryPromise { }
public interface IjQueryPromise<TResult> : IjQueryPromise { }
public static class jQueryPromiseEx
{
public static T Done<T>(this T t, params Action[] doneCallbacks)
where T : IjQueryPromise { return t; }
p
提前道歉,为这些琐碎的问题道歉,但我很困惑。
我有一个类层次结构如下
namespace MyNamespace
{
public class ClassA {}
public class TypeA<A> where A : ClassA
{
public A p1 { get; set; }
}
public class SubTypeA<A> : TypeA<A> where A : ClassA
{
public TypeA<A> p2 { get; set;
以下C#的等效VB.NET代码是什么:
Dim moo = Function(x as String) x.ToString()
我认为这应该有效:
var moo = (string x) => x.ToString();
但是这产生了一个编译器错误:Cannot assign lamda expression to an implicitly-typed local variable
经过进一步研究,我发现VB示例中变量moo (moo.GetType())的类型是VB$AnonymousDelegate_0'2[System.String,System.String]。
在
给定向量的这种类型,如何创建特定类型的项目的零长度向量?
data Vect : Nat -> Type -> Type where
VectNil : Vect 0 ty
(::) : ty -> Vect size ty -> Vect (S size) ty
VectNil字符串和我在REPL中尝试过的所有变体都失败了。期望VectNil像C#中泛型列表的默认构造函数那样工作难道不正确吗?
new List<string> (); // creates a zero length List of string
我有C# ArrayList,并添加了两个项int和string类型,现在for循环项返回,并在运行时在var类型中捕获。这个变量类型如何决定编译时的数据类型?
ArrayList al = new ArrayList();
al.Add(10);
al.Add("A");
for(int i=0; i<2;i++)
{
var val = al[i];
Console.WriteLine("type of value is {0} and {1}",val.GetType(),val);
}
这对我来说似乎很奇怪,但我记得Eric Lippert在一个帖子中评论了C#不能(由于设计,或者至少是约定,我认为)无法重载基于返回类型的方法,所以可能是以某种复杂的方式与此相关。
这有没有什么原因不起作用:
public static T Test<T>() where T : new()
{
return new T();
}
// Elsewhere
SomeObject myObj = Test();
但这确实是:
var myObj = Test<SomeObject>();
从某种角度来看,它们都很好,因为您没有重复自己(以非常小的方式),但这只
为什么编译器能够在函数返回类型的情况下正确推断String类型参数。
public class Generics {
private static List<String> function() {
return new ArrayList<>();
}
}
但是,当要推断的类型是方法参数时,它会失败:
public class Generics {
public static void main(String[] args) {
method(new ArrayList<>());
}
据我理解,C#最初是一种静态语言,在.NET框架中进行了一些增强,并开始支持该语言的动态特性。
我认为c#中的"var“关键字在运行时加载DLL时非常强大,而且我们不知道将来的类型,这是非常有用的。
但我认为,如果变量在设计时被声明为变量,则会带来确定变量类型的开销。现在,通过执行一些很好的建议,负责使我们的代码更好、更干净的再清晰一点,它建议我如下所示:
我的代码如下所示:
StatusResult result = new StatusResult();
Resharper建议它必须转换成
var result = new StatusResult();
为什么会这样呢?当我认为
这是原始的Linq:
var developersUsingCSharp =
from d in developers
where d.Language == "C#"
select d.Name;
这可以写成:
Func<Developer, bool> filteringPredicate = d => d.Language == "C#";
Func<Developer, string&g
我从AWS放大器教程中复制了以下内容:
const styles = {
container: { flexDirection: 'column' },
...
};
<div style={styles.container}>
但我得到了:
Type '{ flexDirection: string; }' is not assignable to type 'CSSProperties'.
Types of property 'flexDirection' are incompatible.
没有强类型的View()方法来返回ActionResult。所以,假设我有
class Edit : ViewPage<Frob>
在我的FrobController中,我将执行类似于“返回视图”(“编辑”,someFrob)的操作。这里没有检查,所以我必须始终手动同步视图和控制器对它的使用。这是次优的,而且我不知道任何内置的修复。
我将此方法添加到控制器基类中:
public ActionResult ViewPage<V, M>(V view, M model)
where V : ViewPage<M>
where M : class
嗨,我很难让C#类型的推理做我想做的事。我有一个非常特殊的情况,我有很多变量
ConcurrentDictionary<T, IDictionary<U, V> >
其中T,U,V可以是一些随机类型,如长,int或其他。
我想要编写处理这类变量的方法--特别是检查它们的直方图。
所以我写了一个方法
public static IOrderedEnumerable<Tuple<int,int>> GetDictionaryHistogram<T, U, V, W>(T dictionary) where T : ConcurrentDi
我正在学习在.Net中使用托管扩展框架(MEF.)的可插式体系结构。我在网络上看到了示例代码,但当我试图实现它时,我一度陷入困境。
该守则使用的是:
var catalog = new AttributedAssemblyPartCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog.CreateResolver());
此var可在C# 3.0上使用,正如我在C# 2.0中编码的那样。
以上两种说法的替代办法是什么?如何使用VS 2005使它们在c# 2.0中工作
给定以下代码:
class C
{
C()
{
Test<string>(A); // fine
Test((string a) => {}); // fine
Test((Action<string>)A); // fine
Test(A); // type arguments cannot be inferred from usage!
}
static void Test<T>(Action<T> a) { }
void A(
我发现在Java中,我可以使用匿名类来实现像Runnable (非泛型)这样的接口。我也可以声明一个变量,而不需要在"=“右边指定type参数。但我发现是泛型类型,我不能省略以下内容:
import java.util.ArrayList;
import java.util.List;
interface Normal {
Integer f();
void g();
}
interface Generic<T> {
T f();
void g();
}
public class GenericInterface {
public s
我注意到C#编译器不会推断第二个泛型参数。
示例:
C++模板代码:(是的,我知道模板不像泛型那样工作)
class Test {
public:
template <class T,class V>
T test(V v) {
//do something with v
return T();
}
};
int i = 0;
Test t = new Test();
double j = t.test<double>(i); //infers V as int
模板(和泛型)不能推断返回类型,所以在C++中,我给它提供了
我有一个关于Scala类型构造函数的类型推断的问题。我在运行Scala 2.9.1..。
假设我定义了树:
sealed trait Tree[C[_], A]
case class Leaf[C[_], A](a: A) extends Tree[C, A]
case class Node[C[_], A](a: A, c: C[Tree[C, A]]) extends Tree[C, A]
并根据我的树定义定义了一个BinaryTree:
type Pair[A] = (A, A)
type BinaryTree[A] = Tree[Pair, A]
现在,我可以将整数的Bina
可能重复:
c#允许这样做:
public class MyClass
{
public void Foo()
{
var q = new MyObject();
}
}
但它不允许这样做:
public class MyClass
{
var q = new MyObject();
public void Foo()
{
// ...
}
}
这有什么原因吗?谢谢。
在javascript中,我们可以创建如下箭头函数:
let square= (a) => a * a;
像这样直接打电话给我们:
square(1, 2);
是否有使用c#进行类似操作的解决方案?我试过了,但是它给了我这个错误(无法推断委托类型)
var square = (x) => x * x;