是否可以编写预处理器宏,以便将可变数量的参数转换为连续的函数调用,例如
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的新手.
我正在努力让自己熟悉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)
提前致谢!
在我的代码优先设置中,我不希望消费者(在这种情况下是一个网页)能够在设计时删除并重新创建数据库,因为我担心以后会忘记添加适当的逻辑并进行拍摄我自己在脚下(为了在上线前创建具有适当权限的数据库用户).因此,该网站有三个与该解决方案相关的项目:
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#语言有几种模式特性,即类不需要从特定接口派生; 而是实现某种模式,以便参与一些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>.
所以我的问题是双重的,
IAsyncFoo和未发布的规范之间.有没有更好的方法来计算谓词函数为true的元素数量,除此之外:
PredCount[lst_, pred_] := Length@Select[lst, pred];
Run Code Online (Sandbox Code Playgroud)
我问,因为构造lstwith 的子集似乎效率低下Select[],因为Count[]只能使用模式.在我的用例中,函数PredCount被大量调用多次lst.
我有一个基于Codefirst EF-4.1的程序.用户获取上下文并可以修改某些属性.用户完成后,我会快速完成
ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);
Run Code Online (Sandbox Code Playgroud)
确定是否SaveChanges()需要a .如果我执行"SaveChanges()"调用,则所做的更改将持久保存到数据库中.
这适用于某些属性,不适用于其他属性.具体来说,它似乎适用于简单类型float和集合层次结构ObservableCollection.
难道我做错了什么?
假设我们有一个函数返回一些值和一个错误.处理错误和值声明的首选方法是什么?
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)