所以我有一个简单的设置,一个带有Populating事件的自动完成框,我想绑定到一个命令.我用
clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity
Run Code Online (Sandbox Code Playgroud)
(这有更好的命名空间吗?)
绑定它并不是什么大不了的事,最重要的是将PopulatingEventArgs参数传递给bound命令.
那么我该如何根据PRISM的最佳实践和MVVM一般来做呢?
除了使用类型化数组之外,有没有办法在TypeScript中使用其他类型参数化类型?
KnockoutJs真的很有必要.
我需要一个优雅的方法,它采用一个可枚举的方法,并获得可枚举的枚举数,每个元素中包含相同数量的元素但最后一个:
public static IEnumerable<IEnumerable<TValue>> Chunk<TValue>(this IEnumerable<TValue> values, Int32 chunkSize)
{
// TODO: code that chunks
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
public static IEnumerable<IEnumerable<TValue>> Chunk<TValue>(this IEnumerable<TValue> values, Int32 chunkSize)
{
var count = values.Count();
var numberOfFullChunks = count / chunkSize;
var lastChunkSize = count % chunkSize;
for (var chunkIndex = 0; chunkSize < numberOfFullChunks; chunkSize++)
{
yield return values.Skip(chunkSize * chunkIndex).Take(chunkSize);
}
if (lastChunkSize > 0)
{
yield return values.Skip(chunkSize * count).Take(lastChunkSize);
}
}
Run Code Online (Sandbox Code Playgroud)
考虑下面的例子.如果我首先定义该委托类型的变量,我可以调用委托的扩展方法.但我不能在作为参数传递的委托上调用该扩展方法.我不明白为什么它第一次工作,但第二次不起作用.我究竟做错了什么?
public static class Extender
{
public static Func<String, String> Compose(this Func<String, String> outer, Func<String, String> inner)
{
return input => outer(inner(input));
}
}
public class Demo
{
public void WillingToTakeStringToStringDelegate(Func<String, String> map)
{
// blah
}
public void RunMe()
{
Func<String, String> outer = x => "(outer: " + x + ")";
// this works:
var composition = outer.Compose(x => "(inner: " + x + ")");
Trace.Write(composition("!")); // ---> (outer: (inner: …Run Code Online (Sandbox Code Playgroud) 更新:以下代码仅在C#4.0(Visual Studio 2010)中有意义
似乎我对协方差/逆变事物有一些误解.谁能告诉我为什么以下代码无法编译?
public class TestOne<TBase>
{
public IEnumerable<TBase> Method<TDerived>(IEnumerable<TDerived> values)
where TDerived: TBase
{
return values;
}
}
Run Code Online (Sandbox Code Playgroud)
而这一个编译:( !!!)
public interface IBase
{
}
public interface IDerived: IBase
{
}
public class TestTwo
{
public IEnumerable<IBase> Method(IEnumerable<IDerived> values)
{
return values;
}
}
Run Code Online (Sandbox Code Playgroud) 对于需要开始和分离结束部分的情况," 使用 "构造看起来非常方便.
快速举例说明:
using (new Tag("body")) {
Trace.WriteLine("hello!");
}
// ...
class Tag : IDisposable {
String name;
public Tag(String name) {
this.name = name;
Trace.WriteLine("<" + this.name + ">");
Trace.Indent();
}
public void Dispose() {
Trace.Unindent();
Trace.WriteLine("</" + this.name + ">")
}
}
Run Code Online (Sandbox Code Playgroud)
开头部分定义为构造函数,结束部分是Dispose方法.
然而,尽管有吸引力,但这个结构有一个严重的警告,这个警告来自Dispose方法是从finally块中调用的.所以有两个问题:
您应该避免从finally块中抛出异常,因为它们将覆盖应该捕获的原始异常.
如果在"开始"和"结束"之间抛出异常,则无法知道Dispose方法的内部,因此无法相应地处理"结束"部分.
这两件事使得使用这种结构变得不切实际,这是一个非常可悲的事实.现在,我的问题是:
我对问题的理解是对的吗?这是"使用"实际上如何工作?
如果是这样,有没有办法克服这些问题,并实际使用"使用"结构,而不是它最初的设计(释放资源和清理)
如果没有实用的方法来"使用"这种方式.有哪些替代方法(使用开头和结尾部分强制执行某些代码的上下文)?
c# language-features design-patterns exception-handling exception
有许多遗留接口以普通的形式获得实体集合IEnumerable.通常人们可以foreach(CertainTypeWeSureItemIs item in items)在C#中将对象转换为他们想要的任何类型.IEnumerable不会直接转换为序列.包装它seq { for x in xs -> x }也没有多大帮助,因为它得到了seq{obj}.那么我如何在F#中做到这一点?
如果F#返回第一个(从左到右,如果有的话)在列表元素上成功应用函数,则有一个标准的tryPick函数.我正在跳跃有一个像Haskell那样的标准函数.我试过 Hoogle并没有找到任何东西.
我是Haskell的新手,我不确定这样做的正确方法是什么.你会这样做:
tryPick:: (a -> Maybe b) -> [a] -> Maybe b
tryPick try xs = case Maybe.mapMaybe try xs of
[] -> Nothing
(x:_) -> Just x
Run Code Online (Sandbox Code Playgroud)
?
我正在使用typescript处理应用程序的UI.与此同时,其他人也在为我提供数据.我们就数据合同达成了一致意见,但是这个过程很容易出错,我不断从服务器获取无效的数据对象.所以我的问题是我可以使用typescript中定义的一些接口以某种方式验证动态对象(在运行时)吗?
这个问题是在2012年提出的,因此它不能重复检查一个对象是否在运行时使用 2015年提出的TypeScript实现了一个接口.
我有办法直接将类型注释应用于对象文字吗?直接我的意思是不必将其分配给注释类型的变量.例如:我知道我可以这样做:
export interface BaseInfo { value: number; }
export interface MyInfo extends BaseInfo { name: string; }
function testA(): BaseInfo = {
const result: MyInfo = { value: 1, name: 'Hey!' };
return result;
}
Run Code Online (Sandbox Code Playgroud)
我也可以这样做:
function testB(): BaseInfo = {
return { value: 1, name: 'Hey!' };
}
Run Code Online (Sandbox Code Playgroud)
但我需要的是:
function testC(): BaseInfo = {
return { value: 1, name: 'Hey!' }: MyInfo; // <--- doesn't work
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
function testD(): BaseInfo = {
return MyInfo: { value: 1, name: …Run Code Online (Sandbox Code Playgroud) c# ×5
typescript ×3
generics ×2
ajax ×1
c#-4.0 ×1
covariance ×1
datacontract ×1
delegates ×1
events ×1
exception ×1
f# ×1
haskell ×1
icommand ×1
ienumerable ×1
linq ×1
mvvm ×1
validation ×1