小编mBr*_*024的帖子

C#List .ConvertAll效率和开销

我最近了解了List的.ConvertAll扩展.我今天在代码中使用它几次,将我的对象的大型列表转换为其他对象的列表.它似乎工作得很好.但是,我不确定这与仅迭代列表和转换对象相比有多快或多快..ConvertAll是否会使用任何特殊的东西来加速转换过程,或者它只是一种简单的转换列表而无需设置循环的方法?

c# performance list convertall

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

Azure 管理 API - TokenCredentials 与 TokenCloudCredentials

以下是计算预发布的最新版本,它利用新的资源组方式来控制访问: https: //www.nuget.org/packages/Microsoft.Azure.Management.Compute/13.0.4-prerelease

这是最新版本的 Sql 预发行版,它还利用新的资源组方式来控制访问: https: //www.nuget.org/packages/Microsoft.Azure.Management.Sql/0.46.0-prerelease

对于 Compute dll,所有构造函数都需要“ServiceClientCredentials”,因此建议您使用带有 subcriptionId 和访问令牌参数的 TokenCredentials 类。

对于 Sql dll,所有构造函数都需要“SubscriptionCloudCredentials”,因此建议您使用带有 subcriptionId 和访问令牌参数的 TokenCloudCredentials 类。

在我看来,TokenCredentials 和 TokenCloudCredentials 是同一件事,但继承有所调整。那么拥有两个有什么意义呢?他们是否正在从一个更改为另一个,而我只需要坚持让他们清理这一点,或者我是否必须在代码中管理两个不同的令牌实体?

c# sql api virtual-machine azure

5
推荐指数
0
解决办法
1424
查看次数

如何为容纳函数的新类型构造fmap

假设我要定义一个包含函数的新类型:

newtype Test m a = Test(m -> (a, m))
Run Code Online (Sandbox Code Playgroud)

这可以用来容纳某种状态。

现在让我们说我想为这个新类型实现fmap。

instance Functor (Test m) where
    --fmap :: (a -> b) -> Test m a -> Test m a -> b
    fmap f (Test f1) (Test f2) = ?
Run Code Online (Sandbox Code Playgroud)

由于新类型房屋具有功能,因此无法使用模式匹配将f1和f2分开。

例如,我最初认为我可以将f2的输入值传递给调用f1以产生一个(a,m)元组,但是我认为您不能做到这一点。

tup = f1 (get input of f2)
Run Code Online (Sandbox Code Playgroud)

有人能为我提供处理这种情况时我所缺少的概念吗?或者这不可能吗?

谢谢

更新

非常感谢Redu和Willem Van Onsem。

似乎我对如何使用合成运算符(。)缺乏了解。

基本上,这里的关键是使用(。)来获取元组的第一个元素,然后执行一堆局部函数定义以进入fmap所需的状态。这是我的fmap实现,没有使用库函数。故意冗长以帮助理解。

alterParamStateHelper :: (a -> b) -> (m -> a) -> m -> (b, m)
alterParamStateHelper f1 f2 m = (b, m)
  where …
Run Code Online (Sandbox Code Playgroud)

haskell functor newtype

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

C# ZipOutputStream 从输出流获取无效文件

我一直在使用 C# 的 SharpZip 库(版本 0.86.0)。我基本上用它来将许多文件打包到一个干净的 zip 文件中。这是我的函数生成 zip 文件的字节数组的方式:

public static byte[] CompressToZip(List<Tuple<byte[], string>> fileItemList, int zipLevel = 3)
{
        MemoryStream zipMemoryStream = new MemoryStream();

        ZipOutputStream zOutput = new ZipOutputStream(zipMemoryStream);
        zOutput.SetLevel(zipLevel);

        ICSharpCode.SharpZipLib.Checksums.Crc32 crc = new ICSharpCode.SharpZipLib.Checksums.Crc32();

        foreach (var file in fileItemList)
        {
            ZipEntry entry = new ZipEntry(file.Item2);
            entry.DateTime = DateTime.Now;
            entry.Size = file.Item1.Length;

            crc.Reset();
            crc.Update(file.Item1);

            entry.Crc = crc.Value;

            zOutput.PutNextEntry(entry);
            zOutput.Write(file.Item1, 0, file.Item1.Length);
        }

        zOutput.IsStreamOwner = false;
        zOutput.Finish();
        zOutput.Close();
        zipMemoryStream.Position = 0;

        byte[] zipedFile = zipMemoryStream.ToArray();
        return zipedFile;
    }
Run Code Online (Sandbox Code Playgroud)

该函数对于其中包含一项的文件效果很好。但由于某种原因,当我有两个或更多时,当我提取/打开它时,我会遇到错误。 …

c# zipoutputstream

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

使用azure活动目录进行身份验证时,错误地进行Azure Management Library API调用

我的公司正在研究Azure的报告.我们只希望我们的客户向我们提供只读凭证供我们使用.我做了一些研究,看起来Azure Active Directory就是这样做的.所以我希望使用只读Azure目录应用程序进行身份验证.

为了让我开始,我正在关注此博客,介绍如何通过Azure Active Directory使用Management API.

https://msdn.microsoft.com/en-us/library/azure/dn722415.aspx

除了显示非常不友好的方法,它不起作用=(

以全局管理员身份登录后出现此错误:

"AADSTS90014:请求正文必须包含以下参数:'client_secret或client_assertion'."

做了一些研究,发现这种身份验证风格适用于原生应用而非网络应用(尽管博客文章说其他明智的......).所以我做了一个调整.我的GetAuthorizationHeader现在看起来像这样:

    private static string GetAuthorizationHeader()
    {
        AuthenticationResult result = null;

        var context = new AuthenticationContext("https://login.windows.net/" + ConfigurationManager.AppSettings["tenantId"]);

        string clientId = ConfigurationManager.AppSettings["clientId"];
        string clientSecret = ConfigurationManager.AppSettings["clientSecret"];
        ClientCredential clientCred = new ClientCredential(clientId, clientSecret);

        var thread = new Thread(() =>
        {
            result = context.AcquireToken(
              "https://management.core.windows.net/",
              clientCred);
        });

        thread.SetApartmentState(ApartmentState.STA);
        thread.Name = "AquireTokenThread";
        thread.Start();
        thread.Join();

        if (result == null)
        {
            throw new InvalidOperationException("Failed to obtain the JWT token");
        }

        string token = result.AccessToken;
        return …
Run Code Online (Sandbox Code Playgroud)

c# authentication azure azure-sdk-.net azure-active-directory

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