小编Gle*_*eno的帖子

C宏扩展为多个函数调用

是否可以编写预处理器宏,以便将可变数量的参数转换为连续的函数调用,例如

MAP(f, 1, 2, 3, ..., n)
Run Code Online (Sandbox Code Playgroud)

f(1); f(2); f(3); ... f(n);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有以下,这似乎工作:

#define MAP(f, t, ...) \
{\
    t __varlist[] = {__VA_ARGS__};\
    for(int i = 0; i < sizeof(__varlist) / sizeof(t); i++)\
        f(__varlist[i]);\
}
Run Code Online (Sandbox Code Playgroud)

请注意,此宏采用类型参数,以便它可以更有用.

有没有办法在不宣布临时的情况下做到这一点?或者这没关系,因为编译器非常聪明,它可以找出所有内容?我是C的新手.

c macros c-preprocessor

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

在WPF中的状态之间设置边距值

我正在努力让自己熟悉WPF即将开展的项目.我在状态之间设置动画边距问题.使用Blend我已经获得了以下示例XAML.如果我从代码隐藏中触发状态"大",则矩形在1秒后突然膨胀,而不是"缓和"到扩展中,这是期望的效果.

<Grid x:Name="LayoutRoot">
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStateGroup">
            <VisualStateGroup.Transitions>
                <VisualTransition GeneratedDuration="0:0:1"/>
            </VisualStateGroup.Transitions>
            <VisualState x:Name="Large">
                <Storyboard>
                    <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="rectangle">
                        <EasingThicknessKeyFrame KeyTime="0" Value="64,135,47,191"/>
                    </ThicknessAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Rectangle x:Name="rectangle" Fill="#FFF4F4F5" Margin="428,135,47,191" Stroke="Black"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

wpf xaml blend

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

无需添加任何数据即可重新生成Code-First数据库

在我的代码优先设置中,我不希望消费者(在这种情况下是一个网页)能够在设计时删除并重新创建数据库,因为我担心以后会忘记添加适当的逻辑并进行拍摄我自己在脚下(为了在上线前创建具有适当权限的数据库用户).因此,该网站有三个与该解决方案相关的项目:

  • Code First Project,包含POCO和初始化程序.有两种截然不同的创建的DbContext实例,一个用来设置的方式Database.SetInitializer来继承从initilizer CreateDatabaseIfNotExists<MyContext>及其他方式不具有DropCreateDatabaseAlways<PanelisternaDbContext>.这种方式我没有得到任何偷偷摸摸的下降和重新创建,并希望即使我以后以某种方式弄乱数据库用户权限,服务器端代码将不会精神并开始删除东西.

  • 网页项目,或一般任何类型的消费者.我的想法是,我在这里创建MyContext,不会丢弃数据库.

  • 重置项目,这是一个控制台应用程序,实际上会删除并重新创建所有内容.它甚至要求我输入一些验证,所以我不会意外地运行它.

所以,到目前为止一切都很棒.除了我不知道如何实际删除和重新创建数据库而不放入任何内容.即以下代码执行我想要的:

using (var myContext = MyDbContext.GetContext("connectionString", true)) 
//The trailing 'true' marks that the database is to be dropped and recreated.
{
    var user = new User {};
    myContext.Users.Add(user);
    myContext.SaveChanges();
    myContext.Users.Remove(user);
    myContext.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在添加和删除一个User对象,以便SaveChanges()实际上可以执行某些操作.如果我只是做一个SaveChanges()数据库将不会删除/重新创建.

所以,不用多说,我正在寻找一种更简洁的方法来实现数据库娱乐,以及对这种基于重置的解决方案的任何评论或想法.

c# entity-framework ef-code-first

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

在C#中启用模式的语法是什么?

C#语言有几种模式特性,即类不需要从特定接口派生; 而是实现某种模式,以便参与一些C#语法/功能.

我们来看一个例子:

public class MyCollection : IEnumerable
{
    public T Add(T name, T name2, ...) { }
    public IEnumerator GetEnumerator() { return null; }
}
Run Code Online (Sandbox Code Playgroud)

在这里,TYPE是任何类型.基本上我们有一个实现的类,IEnumerable并且有一个以Add()任意数量的参数命名的方法.

这将启用以下新MyCollection实例的声明:

new MyCollection{{a1, a2, ...}, {b1, b2, ...} }
Run Code Online (Sandbox Code Playgroud)

这相当于:

var mc = new MyCollection();
mc.Add(a1, a1, ...);
mc.Add(b1, b2, ...);
Run Code Online (Sandbox Code Playgroud)

魔法!与此同时,最近(我相信在BUILD活动期间)Anders Hejlsberg让我们知道新的await/async将使用模式实现,这让WinRT可以逃避返回其他东西Task<T>.

所以我的问题是双重的,

  1. 安德斯谈论的模式是什么,还是我误解了什么?答案应该介于WinRT提供的类型之间,某种效果IAsyncFoo和未发布的规范之间.
  2. 在C#中是否还有其他类似的模式(可能已经存在)?

c# c#-5.0

3
推荐指数
2
解决办法
376
查看次数

计算匹配谓词的元素数量的惯用方法是什么?

有没有更好的方法来计算谓词函数为true的元素数量,除此之外:

PredCount[lst_, pred_] := Length@Select[lst, pred];
Run Code Online (Sandbox Code Playgroud)

我问,因为构造lstwith 的子集似乎效率低下Select[],因为Count[]只能使用模式.在我的用例中,函数PredCount被大量调用多次lst.

wolfram-mathematica

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

DbContext的ChangeTracker问题

我有一个基于Codefirst EF-4.1的程序.用户获取上下文并可以修改某些属性.用户完成后,我会快速完成

ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
Run Code Online (Sandbox Code Playgroud)

确定是否SaveChanges()需要a .如果我执行"SaveChanges()"调用,则所做的更改将持久保存到数据库中.

这适用于某些属性,不适用于其他属性.具体来说,它似乎适用于简单类型float和集合层次结构ObservableCollection.

难道我做错了什么?

code-first entity-framework-4.1

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

惯用语走快乐路径

假设我们有一个函数返回一些值和一个错误.处理错误和值声明的首选方法是什么?

func example_a(data interface{}) (interface{}, error) {
    var err error
    var bytes []byte
    if bytes, err = json.Marshal(data); err != nil {
        return nil, err
    }
    // ... 
    return use(bytes), nil
}

func example_b(data interface{}) (interface{}, error) {
    if bytes, err := json.Marshal(data); err != nil {
        return nil, err
    } else {
        // ... 
        return use(bytes), nil
    }
}

func example_c(data interface{}) (result interface{}, err error) {
    var bytes []byte
    if bytes, err = json.Marshal(data); err != nil { …
Run Code Online (Sandbox Code Playgroud)

idiomatic go

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