小编Rez*_*eni的帖子

如何在C#中减去两个通用对象(T-T)(例如:DateTime - DateTime)?

我写了一个通用类:

public class Interval<T> where T : IComparable // for checking that Start < End 
{
    public T Start { get; set; }
    public T End { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我使用这个类与DateTime,int等.

我需要一个Duration属性,返回一个持续时间,如:

public object Duration
{
    get
    {
        return End - Start;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我的类中包含此属性时,编译器会在运算符上引发逻辑错误-.

我能做些什么来正常实现这个目标,还是应该忽略它?

c# generics properties generic-programming

13
推荐指数
2
解决办法
5848
查看次数

如何使用linq查询获取层次数据的深度?

我有一个像这样的分层数据列表:

var list = new List<Data>(){some data...}

class Data
{
    public int number;
    public List<Data> info;
}
Run Code Online (Sandbox Code Playgroud)

注意:树叶中的数据 - >info = null

例:

数字是number property数据类

   --1
      --11
   --2
      --21
      --22
      --23
      --24
   --3
      --31
      --32
          --321
          --322
   --4
      --41
      --42
Run Code Online (Sandbox Code Playgroud)

如何通过linq查询(非递归方法或for循环)知道树的最大深度到数据列表?

在此示例中,321,322的最大级别为3

谢谢.

c# linq

7
推荐指数
1
解决办法
2959
查看次数

为什么这种类型绑定有奇怪的行为?

正如MSDN所说:

可选地,句点(.)路径可用于绑定到当前源.例如,Text ="{Binding}"等同于Text ="{Binding Path =.}".

但在下面的两个例子中,我遇到了不同的行为:

第一:

  <StackPanel>
    <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
    <Grid DataContext="{Binding Path=MyString}">
      <TextBox Text="{Binding}"></TextBox>
    </Grid>
  </StackPanel>
Run Code Online (Sandbox Code Playgroud)

此示例使用消息引发异常:

"双向绑定需要Path或XPath."

第二:

  <StackPanel>
    <TextBox Text="{Binding Path=MyString, UpdateSourceTrigger=PropertyChanged}"/>
    <Grid DataContext="{Binding Path=MyString}">
      <TextBox Text="{Binding Path=.}"></TextBox>
    </Grid>
  </StackPanel>
Run Code Online (Sandbox Code Playgroud)

并且此示例正常运行,第一个TextBox文本更改反映到viewmodel,第一个TextBox的文本也发生了更改,但第二个TextBox文本更改后未反映到viewmodel(或第一个TextBox)!

问:我感谢任何人解释这两种情况?

注意:父控件的DataContext(如window)是一个带有Notifiable属性的简单类MyString:

谢谢.

c# wpf binding

7
推荐指数
1
解决办法
273
查看次数

在IEnumerable上使用扩展方法的Foreach

快速提问,请参阅此代码:

List<int> result = new List<int>();

var list = new List<int> { 1, 2, 3, 4 };

list.Select(value =>
    {
        result.Add(value);//Does not work??
        return value;
    });
Run Code Online (Sandbox Code Playgroud)

而且:

result.Count == 0 //true
Run Code Online (Sandbox Code Playgroud)

为什么result.Add(value)没有执行?

然而,这不执行,另一个问题是有办法做的foreach的IEnumerableExtention方法

除此之外: IEnumerable.ToList().Foreach(p=>...)

c# ienumerable foreach extension-methods

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

为什么编译器没有对静态表达式树使用相同的对象引用?

我知道表达式树是不可变的,那么为什么编译器不对静态表达式使用相同的对象引用,比如字符串文字呢?

要澄清问题,请参阅示例:

static void Main(string[] args)
{
    Test(p => true);//2637164
    Test(p => true);//3888474
    Test("true");//-292522067
    Test("true");//-292522067
    Console.ReadKey();
}

public static void Test(Expression<Func<string,bool>> exp)
{
    Console.WriteLine(exp.GetHashCode());
}

public static void Test(string str)
{
    Console.WriteLine(str.GetHashCode());
}
Run Code Online (Sandbox Code Playgroud)

c# expression-trees

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

为什么在更改IEnumeable <T>上的foreach类型时没有出现编译器错误?

我写了一个实现的泛型类IEnumerable<T>:

public class EnumerableObject<T> :  IEnumerable<T>
{
    IEnumerator<T> IEnumerable<T>.GetEnumerator()
    {
        ...
    }

    public IEnumerator GetEnumerator()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以迭代这个类的对象,foreach但如果我更改foreach变量的类型,编译器不给我一个错误,我可以编写此代码没有编译器错误:

foreach (string item in new EnumerableObject<int>())
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我遍历一个通用列表,我得到一个编译器错误:

foreach (string item in new List<int>())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

无法将类型'int'转换为'string'

我认为List<T>类条件就像我的类EnumerableObject,但为什么我的情况下没有得到编译器错误?

c# ienumerable foreach

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

使用Var方法输入的方法?

在C#中:

是否可以定义一个输入参数是任何方法的方法

让我更好地描述一下:

我想要一个带签名的方法

bool IsDoit(var method)
{
    try
    {
        method(...);
        return true;
    }
    catch{return false;}
}
Run Code Online (Sandbox Code Playgroud)

这得到一个方法并返回一个抛出异常的布尔值!

通用代表?通用行动?通用功能?

你有什么想法或者不可能吗?

c#

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

为何IEnumerables上的标准扩展方法

当我在列表上使用标准的扩展方法,如 Where(...)

结果总是IEnumerable,当你决定做一个列表操作,如Foreach()

我们需要Cast(不漂亮)或使用ToList()扩展方法

(也许)使用一个消耗更多内存的新List(是吗?):

List<string> myList=new List<string>(){//some data};
Run Code Online (Sandbox Code Playgroud)

(编辑:这个演员不工作)

myList.Where(p=>p.Length>5).Tolist().Foreach(...);
Run Code Online (Sandbox Code Playgroud)

要么

(myList.Where(p=>p.Length>5) as List<string>).Foreach(...);
Run Code Online (Sandbox Code Playgroud)

哪个是更好的代码还是有第三种方式?

编辑: Foreach是一个示例,用BinarySerach替换它

myList.Where(p=>p.Length>5).Tolist().Binarysearch(...)
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods visual-studio

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

如何连续连续行中的列数据?

我在SQL Server中有一个表,如下所示:

Table1:

Id    Symbol
1     a
5     c
8     d
3     b
Run Code Online (Sandbox Code Playgroud)

我想排序基于数据Id并连接symbol连续行:

Query Result:

Id    Symbol
1     ab
3     bc
5     cd
8     d
Run Code Online (Sandbox Code Playgroud)

什么是这个结果的最佳查询?

sql sql-server sql-server-2008

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

在发布模式下构建项目而不更改构建模式?

我有很多项目的解决方案,默认构建配置管理器是Debug.

有时我需要在发布模式下只构建一个项目,所以它迫使我将解决方案构建模式更改为发布,这需要花费很长时间来更改它,并在构建之后切换回调试模式.

问题是如何在不执行上述阶段的情况下快速实现此目的?

谢谢.

build visual-studio-2010 visual-studio

0
推荐指数
1
解决办法
2574
查看次数