我写了一个通用类:
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)
但是当我的类中包含此属性时,编译器会在运算符上引发逻辑错误-.
我能做些什么来正常实现这个目标,还是应该忽略它?
我有一个像这样的分层数据列表:
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
谢谢.
正如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:
谢谢.
快速提问,请参阅此代码:
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上的IEnumerable与Extention方法?
除此之外: IEnumerable.ToList().Foreach(p=>...)
我知道表达式树是不可变的,那么为什么编译器不对静态表达式使用相同的对象引用,比如字符串文字呢?
要澄清问题,请参阅示例:
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) 我写了一个实现的泛型类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#中:
是否可以定义一个输入参数是任何方法的方法?
让我更好地描述一下:
我想要一个带签名的方法
bool IsDoit(var method)
{
try
{
method(...);
return true;
}
catch{return false;}
}
Run Code Online (Sandbox Code Playgroud)
这得到一个方法并返回一个抛出异常的布尔值!
通用代表?通用行动?通用功能?
你有什么想法或者不可能吗?
当我在列表上使用标准的扩展方法,如 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) 我在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)
什么是这个结果的最佳查询?
我有很多项目的解决方案,默认构建配置管理器是Debug.
有时我需要在发布模式下只构建一个项目,所以它迫使我将解决方案构建模式更改为发布,这需要花费很长时间来更改它,并在构建之后切换回调试模式.
问题是如何在不执行上述阶段的情况下快速实现此目的?
谢谢.
c# ×8
foreach ×2
ienumerable ×2
linq ×2
binding ×1
build ×1
generics ×1
properties ×1
sql ×1
sql-server ×1
wpf ×1