小编use*_*158的帖子

函数的扩展方法

我可以创建任何类型的扩展方法.一旦这样的类型是例如int的Func.

我想为函数编写扩展方法,而不是函数的返回类型.

我可以用hacky方式做到这一点:

Func<int> getUserId = () => GetUserId("Email");
int userId = getUserId.Retry(2);
Run Code Online (Sandbox Code Playgroud)

函数Retry是一个定义为的扩展方法:

public static T Retry<T>(this Func<T> func, int maxAttempts)
{
    for (int i = 0; i < maxAttempts; i++)
    {
        try
        {
            return func();
        }
        catch
        {

        }
    }

    throw new Exception("Retries failed.");
}
Run Code Online (Sandbox Code Playgroud)

我真正想做的是:

var userId = (() => GetUserId("Email")).Retry(2);
Run Code Online (Sandbox Code Playgroud)

但编译器不会将该函数与T函数进行协调.

我知道罗斯林的静态,所以我可以这样做:

Retry(() => GetUserId("Email"), 2);
Run Code Online (Sandbox Code Playgroud)

但我发现这更难阅读.我真的希望我创建的辅助函数不受影响.

还有其他模式会给我类似的结果,比如monadic表达式,或者使用链接(即将T转换为链类型,内部有一个T,然后我为Chain of T编写扩展方法).我对这种方法的问题是你必须通过强制转换为T的链来开始表达式,然后通过强制转换为T结束表达式,这是一个很大的噪音,将读者的注意力从我的业务逻辑中拉开.

我知道我可以在Chain of T to T上使用隐式转换,但这感觉就像它在幕后做了一些魔术.

那么是否有可能获得对函数的引用,而不是先执行它,几乎没有锅炉板代码?

我想为任何类型的Func/Action编写以下内容:

var settings = LoadSettingsFromDatabase().Retry(2);
Run Code Online (Sandbox Code Playgroud)

c#

11
推荐指数
1
解决办法
2770
查看次数

重用通配符appId以启用推送通知

我最近接手了一个iPhone项目,之前从未使用过objective-c.

我必须让应用程序使用推送通知,但第一个appId已经存在且使用通配符(因此没有推送通知).

我创建了另一个带有标识符的appId并获得了推送通知.然而,我的工作场所希望我收到通知工作的通配符应用程序(因为我们已经有很多客户使用该应用程序).

那么如何在不创建新appId的情况下使通配符应用程序更新并使用唯一标识符(即使使用相同的bundleId).

我对这一切都很陌生,所以一步一步的过程非常感谢(ELI5).

作为参考,我使用keychain获取私有.p12文件,我在运行控制器应用程序的Windows服务器上使用它,该控制器应用程序生成推送通知(发送到Apples apns服务器).

编辑:我已经完成了以下步骤,有人能告诉我什么我失踪了吗?

1)创建新的bundleId(使用相同的AppId).

2)配置AppId以使用推送通知.

3)在钥匙串中创建CSR.

4)将其上传到门户并创建生产证书.

5)下载该证书并导出私钥.

6)使用与1相同的bundleId创建配置文件(例如au.com.website).

7)下载该配置文件,将其放入x-code和我的iPhone设备上.

8)在x-code的构建设置中,使用bundle Id并使用我在步骤6中创建的配置文件.

9)归档应用程序,通过临时部署,将文件保存到桌面.

10)将该文件放入TestFlight,从我的iPhone上的testFlight下载应用程序.

11)将私钥放在我的Windows服务器上并发送推送通知(它们发送wo错误).

我没有得到推送通知(iPhone设置为恢复它们).

再一次,这是与另一个别人制作的应用程序一起工作,所以我知道代码有效.

iphone objective-c ipad

9
推荐指数
2
解决办法
6103
查看次数

Func <T,T>到T的通用隐式转换

所以我有这段代码,受到javascript自我初始化匿名函数的启发.

public static Contact Login(string username, string passwordHash = null)
{
    return ((Func<Contact, Contact>)(c => {
            if (c != null) {
                var context = new CurrentContext();
                context.Contact = c;
                context.Save();
            }
            return c;
        }))(GetContactFromDatabase(username) ?? GetContactFromWebService(username, passwordHash));
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但Func Contact,Contact对我来说有点冗长.我希望编译器通过最后传入的参数类型来计算转换.

像这样的东西:

public class AF<T>
{
    public static implicit operator T(Func<T, T> fun)
    {
        return fun();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不会编译.我想到了一个与c#tuple类不同的类,它用15个不同的T来定义自己.

结束代码看起来像:

public static Contact Login(string username, string passwordHash = null)
{
    return ((AF)(c => {
            if (c != null) { …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

相同的SQL语句给出不同的结果

我从视图中选择了行(视图中的where子句在静态数据上).如果我运行下面的SQL,我每次都会得到相同的结果.我希望recordsIds是相同的,并且顺序相同,但它们完全不同!

我正在使用SQL SEVER 2012.谁能解释为什么这个结果有所不同?

sql server的屏幕转储

sql sql-server sql-server-2012

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

标签 统计

c# ×2

generics ×1

ipad ×1

iphone ×1

objective-c ×1

sql ×1

sql-server ×1

sql-server-2012 ×1