小编Ari*_*oth的帖子

理解复杂的块语法

我是Objective C和iOS开发的初学者,但是13年的.NET资深人士.我很难在心理上绘制以下声明,这些声明来自Objective with Objective C指南:

void (^(^a)(void (^) (void))) (void) = ...
Run Code Online (Sandbox Code Playgroud)

它用作为什么应该typedef用来定义块的一个例子,但是我想要了解我正在寻找的内容,以便首先更好地理解块定义语法.

这是我到目前为止的图表:

在此输入图像描述

我遇到问题的地方是我理解基本语法的方式:

[return_val] (^[block_name]) ([block_args]) = ...
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,那么我所拥有的是一个返回void且没有参数但被命名的块(^a) (void (^) void).这意味着我的块的名称,而不是一个直的字符串,本身就是一个块.

显然我在这里遗漏了一些东西.有人可以对此有所了解吗?根据该网站,它简化为:

typedef void (^SimpleBlock) (void);
SimpleBlock (^complexBlock) (SimpleBlock) = ...
Run Code Online (Sandbox Code Playgroud)

我只是想念如何.

编辑:第三个空格应该在括号中.我修好了.它在图像中是错误的,但我不想为此重做整个图像.:)如果它原来是我的问题的来源,我会在这里修复它.

objective-c ios objective-c-blocks

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

JSON.NET:在不重新解析的情况下缩小/格式化内容

是否可以使用Newtonsoft JSON.NET库缩小/格式化JSON字符串而不强制系统重新解析代码?这就是我的方法:

public async Task<string> Minify(string json)
{
    // TODO: Some way to do this without a re-parse?
    var jsonObj = await JsonOpener.GetJsonFromString(json);
    return jsonObj.ToString(Formatting.None);
}

public async Task<string> Beautify(string json)
{
    // TODO: Some way to do this without a re-parse?
    var jsonObj = await JsonOpener.GetJsonFromString(json);
    return FormatJson(jsonObj);
}

private string FormatJson(JToken input)
{
    // We could just do input.ToString(Formatting.Indented), but this allows us
    // to take advantage of JsonTextWriter's formatting options.
    using (var stringWriter = new StringWriter(new StringBuilder())) …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

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

如何在里面设置UIButton的颜色(不是背景颜色)

我正在调整一些视觉变化,并注意到当我尝试设置UIButton的背景颜色时,它只将颜色设置在实际按钮之外(不在按钮本身内)

UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(6, 9, 50, 25);    
[button setTitle:@"Select" forState:UIControlStateNormal];
button.backgroundColor = [UIColor redColor]; 
Run Code Online (Sandbox Code Playgroud)

是否存在允许我设置颜色的其他属性?

iphone background-color uibutton

7
推荐指数
2
解决办法
8930
查看次数

尝试在IIS6上安装HTTPModule时出现"无法加载类型"错误 - Web.config错误

两个小时的搜索谷歌和Stackoverflow,我无处可去.这与代码隐藏无关,这就是我到目前为止没有运气的原因.

这是我的问题:我有一个运行IIS6的遗留网站,我需要在其上安装HTTPModule,以便为特定文件类型的任何请求添加一些处理.我编写了模块,将其复制到应用程序的/ bin目录,并将以下内容添加到我的Web.config中:

<system.web>
  <httpModules>
    <add name="YourModule" type="SecurityModule.SecurityModule" />
  </httpModules>
</system.web>
Run Code Online (Sandbox Code Playgroud)

然后我启动网站并且......"/ MyApplication中的服务器错误".

以下是它给我的全部内容:


配置错误

描述:处理为此请求提供服务所需的配置文件时发生错误.请查看下面的具体错误详细信息并相应地修改配置文件.

分析器错误消息:无法加载类型'SecurityModule.SecurityModule'.(D:\ Websites\Reports\web.config第4行)

来源错误:

Line 2:     <system.web>
Line 3:       <httpModules>
-->Line 4:            <add name="YourModule" type="SecurityModule.SecurityModule" />
Line 5:       </httpModules>
Line 6:     </system.web>
Run Code Online (Sandbox Code Playgroud)

源文件:D:\ Websites\Reports\web.config行:4

版本信息:Microsoft .NET Framework版本:2.0.50727.3625; ASP.NET版本:2.0.50727.3618


第4行,我添加了一个箭头,是红色的.就是这样!没有解释,没有提示去哪里.只是"无法加载类型".我尝试过各种各样的事情来解决这个问题:

  • 如果我弄错了,请使用模块的名称.和类型中的字符串.
  • 将/ Bin更改为/ bin
  • 确保模块是针对.NET Framework 2.0编译的
  • 放弃web.config并尝试将其设置为IIS 6中的映射(从那个获得404).
  • 与之前相关,尝试使我的扩展的所有文件通过带有通配符映射和配置模块的ASP.NET ISAPI模块.带我回到这个错误.

谁能告诉我这里发生了什么?或者,如果失败了,有人能指出我的方向吗?在这一点上,任何方向都可以.:)我完全死路一条.

谢谢!

asp.net iis-6 httpmodule

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

找不到规则“@typescript-eslint/no-shadow”的定义

不知道这里发生了什么。

我正在努力从 tslint 迁移到 eslint。基本的迁移似乎进行得很顺利(嗯,“顺利”——显然需要制定一些规则),但我遇到过这个,我不知道如何克服它:

1:1 错误 未找到规则“@typescript-eslint/no-shadow”的定义@typescript-eslint/no-shadow

我已经像这样修改了 .eslintrc.js 文件(为简洁起见,剪掉了部分内容):

module.exports = {
    "env": {
        "browser": true,
        "es6": true,
        "node": true
    },
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "project": "tsconfig.json",
        "sourceType": "module"
    },
    "plugins": [
        "eslint-plugin-import",
        "@angular-eslint/eslint-plugin",
        "@typescript-eslint",
        "@typescript-eslint/tslint"
    ],
    "rules": {
        // Many unrelated plugins, all rules, none mentioning no-shadow

        "no-shadow": "off",
        "@typescript-eslint/no-shadow": ["error", { "hoist": "all" }],

        // Many other unrelated plugins, all rules, none mentioning no-shadow.  But I thought
        // This next one may be helpful.

        "@typescript-eslint/tslint/config": [ …
Run Code Online (Sandbox Code Playgroud)

typescript-eslint

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

数据结构:如果堆是树,为什么它们在内部用列表或数组实现?

我正在给自己上数据结构和算法的进修课程(并学习新东西——我在大学主修信息系统而不是计算机科学,所以我没有接受这些方面的正规教育),而且我“一直在研究堆。我有点困惑。

我的理解是堆基本上是一棵半排序树,其中每个子节点的值都保证小于其父节点的值(假设本讨论为 MinHeaps)。那么,如果它是一棵树,为什么我见过的每个实现都在内部使用了类似数组的结构,而不是构建一组树节点?

我必须记住数组中 N 的子节点位于 2N + 1(左)和 2N + 2(右)* 处,这对我来说似乎很奇怪。为什么不直接构建一个具有 Left 和 Right 属性的节点并从那里开始呢?

*来源:本文

algorithm data-structures array-algorithms

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

Powershell:无法更新注册表路径,因为它不存在(但实际上存在)

我们正在 Windows 8.1 中的 IE 上运行编码 UI 测试,并且我们通过 Visual Studio Team Services 进行测试。作为我们构建的一部分,我们运行了一个禁用弹出管理器的 Powershell 脚本。我们用来禁用它的代码是这样的:

Remove-ItemProperty "HKCU:\Software\Microsoft\Internet Explorer\New Windows" -Name "PopupMgr"
New-ItemProperty "HKCU:\Software\Microsoft\Internet Explorer\New Windows" -Name "PopupMgr" -Value 00000000 -PropertyType "DWord"
Run Code Online (Sandbox Code Playgroud)

当我在 Release Manager 中创建和部署构建时,运行它会生成以下错误:

运行命令停止,因为首选项变量“ErrorActionPreference”或公共参数设置为停止:找不到路径“HKCU:\Software\Microsoft\Internet Explorer\New Windows”,因为它不存在。

(强调我的)

我已经登录到 VM 并查看了注册表,并且HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\New Windows绝对存在。我唯一能想到的是它的值不是 DWORD 而是字符串——PopupMgr键的数据值为“是”而不是 1 或 0。但这与错误消息不匹配——错误说它甚至找不到键的路径,而不是值类型不匹配。另外,代码在插入新密钥之前删除了现有密钥,所以我什至不知道它是如何注意到不匹配的。

更奇怪的是,如果我在 VM 中打开 Powershell 并运行那两行(我复制并粘贴以避免输入错误),它们运行得很好。

这个脚本在 Windows 10 上运行得很好并且已经有一段时间了,所以我不确定这里发生了什么。用户是管理员组的成员,所以我认为这不是权限问题。

任何人都可以对此有所了解吗?

powershell internet-explorer azure-pipelines azure-pipelines-release-pipeline

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

使用反射映射相似对象:对象与目标类型不匹配

尽管查看了多个 SO 帖子和我能想到的任何其他内容,但我在这里完全不知所措。

我的目标是制作一个非常非常简单的映射器。我基本上可以在某些单元测试中用作工具的东西。它不需要很复杂或任何东西——只需将一个对象的高级原始值和字符串值映射到另一个对象。所以基本算法是:

  1. 获取所有属性 TFrom
  2. 获取所有属性 TTo
  3. 获取两者中的所有属性,按名称匹配。
    • 我知道这可能是一个错误,因为它们可能具有相同的名称但类型不同,但让我们把它放在一边。这不是我在这里遇到的问题——属性和类型在类之间匹配。
  4. 创建一个TTo我们可以复制到的实例。
  5. 对于在对象之间映射的每个属性:
    1. 获取from对象的值
    2. 将值转换为属性的类型
    3. to对象上设置值

问题是,无论我做什么,无论属性的类型是什么(int或者string,例如),我都会得到以下信息:

对象与目标类型不匹配。

这是我正在使用的代码:

public TTo Map<TFrom, TTo>(TFrom from)
{
    if (from == null) return default;

    var fromProps = GetProperties(typeof(TFrom));
    var toProps = GetProperties(typeof(TTo));

    // Props that can be mapped from one to the other
    var propsToCopy = fromProps.Intersect(toProps, new PropertyComparer()).ToList();

    var returnObject = (TTo)Activator.CreateInstance(typeof(TTo));

    foreach (var prop in propsToCopy)
    {
        // Copy the values
        var …
Run Code Online (Sandbox Code Playgroud)

c# mapping reflection

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

在Silverlight中选择项目时,无法阻止基类中TreeView上的自动水平滚动

我想在Silverlight中选择树视图项时阻止自动水平滚动.我正在尝试在基类中完成它.

到目前为止,我还没有能够管理它.我已经尝试了下面的代码,但是它会执行,然后当我选择它时,事情就会滚动.

using System.Windows;
using System.Windows.Controls;

namespace MyControls
{
    public class CustomTreeView : TreeView
    {
        private ScrollViewer _scrollViewer;

        protected override void OnSelectedItemChanged(RoutedPropertyChangedEventArgs<object> e)
        {
            base.OnSelectedItemChanged(e);
            _scrollViewer.ScrollToHorizontalOffset(0);
        }

        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            _scrollViewer = GetTemplateChild("ScrollViewer") as ScrollViewer;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我实际上并不想完全禁用滚动 - 如果项目飞离树视图的边缘,我希望用户能够滚动到它.我想要做的是当我选择一个可能长于屏幕宽度的子节点时,将树保持在原来的位置.

我在WrapPanel上尝试了RequestBringIntoView,但这似乎只是WPF.我也试过在UpdateLayout和SelectedItemChanged上做这个.一切都无济于事.我似乎无法找到一个通用的解决方案,我可以让另一个类继承并使用.

有人有主意吗?

谢谢!

-Ari

编辑:赏金说明我需要能够在XAML中完成它.那是我的错字.我也将采用代码解决方案.谢谢!

silverlight silverlight-toolkit silverlight-4.0

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

DelegateCommand.CanExecute方法行为不正常

我将控件绑定到DelegateCommand,并且它的CanExecute部分无法正常工作.我正在使用Prism库.谁能告诉我为什么?

命令声明和实例化:

public PlayerManagementViewModel(DatabaseManager dbManager)
{
    _dbManager = dbManager;
    this.ResetUpToDateStatusCommand = new DelegateCommand(() => this.ResetXpUpToDateStatus());
    this.DeletePlayerCommand = new DelegateCommand(() => this.DeleteSelectedPlayer(), () => SelectedPlayer != null);
    this.RefreshPlayers();
}

public ICommand DeletePlayerCommand { get; private set; }
Run Code Online (Sandbox Code Playgroud)

SelectedPlayer定义:

public Player SelectedPlayer
{
    get { return _selectedPlayer; }
    set
    {
        SetProperty(ref this._selectedPlayer, value);
        this.OnPropertyChanged(() => this.FormattedPlayerStatus);
    }
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果你看一下DeletePlayerCommand实例化之上的那一行,那条线就可以了.我没有得到任何CanExecute行为,但至少它是有效的.原样,则DeletePlayerCommand命令永远不会触发关断,即使有断点,除非删除了构造的CanExecute部分完全.

任何人都可以向我解释为什么这是或我做错了什么?

c# wpf prism mvvm

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

Azure / Powershell:检查是否存在SQL Server

我来自C#背景,这是我第一次尝试Powershell。我正在尝试编写一个Powershell脚本,该脚本在Azure中完成很多工作,其中包括:

  • 检查是否存在SQL Server实例
    • 创建服务器(使用New-AzureRmSqlServer)(如果没有)
  • 在服务器上创建一个新的数据库
  • ...和其他一些东西

我的第一个问题是,如果服务器已经存在,则不需要创建它;我可以直接去创建数据库。但是,我似乎无法完成这项工作。

我试过了Get-AzureRmSqlServer,但是如果找不到我要的服务器,就会出错。最后,我使用此函数返回$true是否找到$false

function Check-For-Server
{
    Param(
        [Parameter(Mandatory=$true)]
        [String]
        $ServerName
    )

    if (Test-AzureName -Name $ServerName)
    {
        return $false
    }
    else
    {
        return $true
    }
}
Run Code Online (Sandbox Code Playgroud)

问题出在这里:我遇到以下错误:

Test-AzureName:无法使用指定的命名参数来解析参数集。
在C:\ src \ Powershell \ test.ps1:10 char:9
+ if(Test-AzureName -Name $ ServerName)
+ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~
+ CategoryInfo:InvalidArgument:(:) [Test-AzureName],ParameterBindingException
+ FullyQualifiedErrorId:AmbiguousParameterSet,Microsoft.WindowsAzure.Commands.CloudService.TestAzureNameCommand

有谁知道如何解决这个问题?Google绝对没有帮助,至少Test-AzureName就此特定错误消息而言。我曾想尝试其中一种-Service/ServiceBusName/Storage/Website论点,但不确定哪一种适用于此。或者甚至是相关的-错误消息似乎并不表示我实际上缺少了一个参数,只是我提供的那个参数某种程度上是错误的。

哦,如果有帮助,请致电Check-For-Server

$sqlServerName = "test_db_server"
Check-For-Server -ServerName $sqlServerName
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql-server powershell azure

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

实体框架:AddOrUpdate() 与循环 Add() 的性能

假设我有一个包含 10,000 个对象的集合,需要使用实体框架将其添加到数据库中(我认识到 EF 不太适合此任务,但现在让我们运行它)。出于本问题的目的,我们将做出以下假设:

  1. 只有一张表,有一个IDENTITY主键。
  2. 桌子是空的。
  3. 对象很简单——一切都是原始数据类型(int、bool、string 等)

我可以通过以下两种方式之一在实体框架中执行此操作:

// Option 1
foreach (var item in largeCollection)
{
    _context.SomeTable.Add(item);
}

_context.SaveChanges();

// Option 2
_context.SomeTable.AddOrUpdate(largeCollection);
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

一种方法的性能本质上比另一种方法更好还是更差?或者它们都转化为相同数量的单行INSERT语句?

换句话说,从性能的角度来看,在将多个项目插入数据库时​​使用Add()over AddOrUpdate()(或反之亦然)是否有任何优势?

c# entity-framework

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

通过反思获得自我的价值

我已经看到了一些类似于这个的问题,但是他们都没有问过我想要的东西.基本上,给定一个字符串,我想通过反射得到该字符串的值.

我知道这听起来很奇怪,但我正在编写一个通用的方法来转储对象的所有公共属性,而string是一个特例,因为它的值与它所组成的连接字符数组真的相同.

所以,我的代码是这样的:

var obj = "foo";
var props = obj.GetType().GetProperties();

// I now have two properties -- length and a character array
foreach (var prop in props)
{
   if (prop.PropertyType.IsArray || prop.GetIndexParameters().Length > 0)
   {
      lines.Add(tabs + prop.Name + "(array)");
      lines.Add(tabs + "\t" + prop.GetValue(target, new object[] { 0 }));
   }
   else
      Console.WriteLine(prop.Name + ": " + prop.GetValue(obj, null));
}
Run Code Online (Sandbox Code Playgroud)

这输出如下:

Chars(array)
        f
Length: 3
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但有没有一种方法可以从中获得实际的"foo"值而不需要通过数组并连接它?

谢谢!

-Ari

c# string reflection

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