小编Tri*_*Gao的帖子

如何使用触发器将事件参数传递给命令?

所以我有一个简单的设置,一个带有Populating事件的自动完成框,我想绑定到一个命令.我用

clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity 
Run Code Online (Sandbox Code Playgroud)

(这有更好的命名空间吗?)

绑定它并不是什么大不了的事,最重要的是将PopulatingEventArgs参数传递给bound命令.

那么我该如何根据PRISM的最佳实践和MVVM一般来做呢?

c# events mvvm icommand silverlight-4.0

17
推荐指数
2
解决办法
2万
查看次数

TypeScript中的泛型

除了使用类型化数组之外,有没有办法在TypeScript中使用其他类型参数化类型?

KnockoutJs真的很有必要.

generics typescript

16
推荐指数
2
解决办法
5586
查看次数

我如何组织一个可枚举的?

我需要一个优雅的方法,它采用一个可枚举的方法,并获得可枚举的枚举数,每个元素中包含相同数量的元素但最后一个:

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)

更新 刚发现有一个关于将列表拆分列表拆分为LINQ的子列表的类似主题

c# linq ienumerable

15
推荐指数
3
解决办法
6745
查看次数

无法使扩展方法适用于委托

考虑下面的例子.如果我首先定义该委托类型的变量,我可以调用委托的扩展方法.但我不能在作为参数传递的委托上调用该扩展方法.我不明白为什么它第一次工作,但第二次不起作用.我究竟做错了什么?

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# extension-methods delegates

14
推荐指数
3
解决办法
837
查看次数

协方差/逆变:如何编译以下代码

更新:以下代码仅在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)

c# generics covariance c#-4.0

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

"使用"构造和异常处理

对于需要开始和分离结束部分的情况," 使用 "构造看起来非常方便.

快速举例说明:

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块中调用的.所以有两个问题:

  1. 您应该避免从finally块中抛出异常,因为它们将覆盖应该捕获的原始异常.

  2. 如果在"开始"和"结束"之间抛出异常,则无法知道Dispose方法的内部,因此无法相应地处理"结束"部分.

这两件事使得使用这种结构变得不切实际,这是一个非常可悲的事实.现在,我的问题是:

  1. 我对问题的理解是对的吗?这是"使用"实际上如何工作?

  2. 如果是这样,有没有办法克服这些问题,并实际使用"使用"结构,而不是它最初的设计(释放资源和清理)

  3. 如果没有实用的方法来"使用"这种方式.有哪些替代方法(使用开头和结尾部分强制执行某些代码的上下文)?

c# language-features design-patterns exception-handling exception

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

如何在F#中处理IEnumerable?

有许多遗留接口以普通的形式获得实体集合IEnumerable.通常人们可以foreach(CertainTypeWeSureItemIs item in items)在C#中将对象转换为他们想要的任何类型.IEnumerable不会直接转换为序列.包装它seq { for x in xs -> x }也没有多大帮助,因为它得到了seq{obj}.那么我如何在F#中做到这一点?

f#

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

标准Haskell函数::(a - >可能b) - > [a] - >也许b

如果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)

haskell

13
推荐指数
4
解决办法
970
查看次数

在运行时针对TypeScript中的接口验证"任何"对象

我正在使用typescript处理应用程序的UI.与此同时,其他人也在为我提供数据.我们就数据合同达成了一致意见,但是这个过程很容易出错,我不断从服务器获取无效的数据对象.所以我的问题是我可以使用typescript中定义的一些接口以某种方式验证动态对象(在运行时)吗?


这个问题是在2012年提出的,因此它不能重复检查一个对象是否在运行时使用 2015年提出的TypeScript实现了一个接口.

validation ajax datacontract typescript

12
推荐指数
2
解决办法
7370
查看次数

如何在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)

typescript

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