小编Jul*_*ian的帖子

在Scala中使用协方差符号或通用边界时

在Scala中,可以使用泛型运算符(如+和 - )在泛型类型参数上定义方差.例如,List类型在标准库中是协变的.

class List[+A]
Run Code Online (Sandbox Code Playgroud)

因此,具有协变列表的函数可以像这样定义:

def foo[A](list : List[A])
Run Code Online (Sandbox Code Playgroud)

也可以使用通用边界模拟方差.所以我们也可以写这个

def foo[A](list : List[_:< A])
Run Code Online (Sandbox Code Playgroud)

当然这没有道理,因为list它已经是协变的.但是对于不协变的类型也可以采用相同的技巧.(像Stack).当然,也可以从协同的堆栈(聚合继承)创建新类型.

所以我的问题:

  1. 何时应该使用通用边界进行方差?什么时候应该创建一个新的协变类型?
  2. 泛型边界只对方差有用,或者它们可以声明更多(语言概念).
  3. 如果它们只对方差有用,那么边界只是为了与Java兼容吗?

thx提前:)

scala variance bounds type-bounds

11
推荐指数
2
解决办法
1031
查看次数

学习TypeScript - 转换类型

我是TypeScript的新手,我正在玩各种语言功能.下面是我在许多在线课程中一直在研究的代码示例.

我有问题获得继承和重载以正常工作.在整个代码中,我使用了一辆基本型Auto汽车,以及一辆儿童级卡车.

我试图看看是否有可能将汽车作为卡车投入并访问专门的功能HonkHorn.此外,我正在尝试将卡车投回到Auto并访问WriteDetails的基本功能.

在这两种情况下,似乎对象都保持原始类型.所以typecast4.HonkHorn(); 生成运行时错误:未捕获TypeError:typecast4.HonkHorn不是函数.

尝试将Truck转换为Auto将始终导致调用WriteDetails的专用覆盖.转换代码一直位于示例的底部.

有人可以帮我理解为什么会这样吗?

提前致谢!

// defines the structure of auto options
interface IAutoOptions{
    engine: Engine,
    color: string,
    price: number,
    year: number
}

// extends autooptions with truck specific options
interface ITruckOptions extends IAutoOptions{
    fourbyfour: boolean,
    bedlength: string
}

// defines the structure of engines
interface IEngine {
    enginetype: string;
    horsepower: number;
    hydraulicpump?: string
    start(warmuptime: number, callback: () => void): void;
    stop(): void;
}

// the engine class must implement the members as specified in the IEngine …
Run Code Online (Sandbox Code Playgroud)

inheritance typescript

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

如何用git"拆分"文件

如果我必须在我的开发分支上关注文件:

# file.rb

class Code
 def methodA
  'aA1'
 end
 def methodB
  'bB2'
 end
end
Run Code Online (Sandbox Code Playgroud)

但在我的分支上,我想将方法​​分成不同的文件:

# in file.rb
class Code
  def methodA
    'aA1'
  end
end

# in extra.rb
class Code
  def methodB
    'bB2'
  end
end
Run Code Online (Sandbox Code Playgroud)

我可以简单地在开发时创建文件,然后签出以掌握,重新定位并手动分离文件,但是是否可以进行设置以便当我对开发进行更改时它将被转移到文件的右侧"部分"在主人

git

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

C#XmlDocument SelectNodes不起作用

我想从XML文件中获取值但是我失败了.能帮我指出问题吗?因为我已经非常努力地测试和谷歌搜索,但我仍然无法发现问题.

XML:

<?xml version="1.0" encoding="utf-8" ?> 
<Contacts>
  - <Contact>
    <ID>xxx</ID> 
      <AutoUpdateEnabled>false</AutoUpdateEnabled> 
      <LastChanged>2013-05-29T01:53:59.4470000Z</LastChanged> 
    - <Profiles>
        - <Personal>
              <FirstName>My First Name</FirstName> 
              <LastName>My Last Name</LastName> 
              <UniqueName>My Unique Name</UniqueName> 
              <SortName></SortName> 
              <DisplayName>My Display Name</DisplayName> 
          </Personal>
    </Profiles>
    - <Phones>
        - <Phone>
          <ID>3</ID> 
          <PhoneType>Mobile</PhoneType> 
          <Number>000-0000000</Number> 
          <IsIMEnabled>false</IsIMEnabled> 
          <IsDefault>false</IsDefault> 
          </Phone>
    </Phones>
    - <Locations>
        - <Location>
              <ID>2</ID> 
              <LocationType>Business</LocationType> 
              <CompanyName></CompanyName> 
              <IsDefault>false</IsDefault> 
          </Location>
      </Locations>
</Contact>
- <Contact>
  <ID>xxx</ID> 
  <AutoUpdateEnabled>false</AutoUpdateEnabled> 
  <LastChanged>2013-05-29T01:53:25.2670000Z</LastChanged> 
    - <Profiles>
        - <Personal>
              <FirstName>Person</FirstName> 
              <LastName>Two</LastName> 
              <UniqueName></UniqueName> 
              <SortName></SortName> 
              <DisplayName>Person Two</DisplayName> 
          </Personal>
      </Profiles>
    - <Emails>
        - <Email>
              <ID>1</ID> 
              <EmailType>Personal</EmailType> 
              <Address>MyTest@gmail.com</Address> 
              <IsIMEnabled>false</IsIMEnabled> 
              <IsDefault>true</IsDefault> 
          </Email> …
Run Code Online (Sandbox Code Playgroud)

c# xml selectnodes

10
推荐指数
1
解决办法
6万
查看次数

在NetCore 1.0中替换Array.ConvertAll

我当前的代码正在使用Array.ConvertAll,我需要迁移到net core 1.0.如何将其迁移到Net Core中.

我们可以使用foreach带有自定义转换代码的语句来处理转换吗?但我不知道该怎么做.

任何帮助表示赞赏.

c# .net-core

10
推荐指数
2
解决办法
2151
查看次数

EF Core:使用字典属性

有没有办法用 Entity Framework Core 填充字典属性?

出于性能原因,我们喜欢在应用程序而不是数据库中进行搜索。由于列表不能很好地扩展,我们喜欢使用字典。

例如(简化示例)

class Course
{
    public Dictionary<string, Person> Persons { get; set; }

    public int Id { get; set; }
}

class Person
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情

  • 天真地只是添加一个字典属性。这将导致以下错误:

    System.InvalidOperationException:无法映射属性“Persons”,因为它属于“Dictionary”类型,它不是受支持的原始类型或有效的实体类型。显式映射此属性,或使用 '[NotMapped]' 属性或使用 'OnModelCreating' 中的 'EntityTypeBuilder.Ignore' 忽略它。

  • 尝试添加价值转换(使用HasConversion),但转换仅适用于单个项目而不适用于集合。在HasMany已经提供了一个编译错误:

    builder
      .HasMany<Person>(c => c.Persons) //won't compile, Persons isn't a IEnumerable<Person>
      .WithOne().HasForeignKey("PersonId");
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建一个自定义集合类(从继承Collection<T>和实施InsertItemSetItem等等) -不幸的是,这也不会工作,因为EF核心将项目添加到集合和第一后,将填补特性(至少我们OwnsOne性质,即不在演示案例中) - …

c# dictionary entity-framework-core entity-framework-core-3.1

10
推荐指数
2
解决办法
7788
查看次数

Git 从所有提交中删除文件

我犯了一个“小”错误,并向我的本地存储库添加了一个“小”(> 100MB)文件。

两次提交后,我尝试推送到 github 中的远程存储库,该存储库的限制为 100MB。

我可以使用 删除当前提交中的文件git rm --cached,但它仍在之前的提交中。

如何从所有提交中删除该文件?我已经尝试过这个关于 git filter-branch 的答案,但不适合我的。

git github git-rm

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

常见日志记录无法加载类型NLog.TargetWithLayout

我有一个Wpf .net 4.0 C#项目,我试图从使用Log4Net迁移到使用NLog作为Common.LoggingFaçade后面的日志库.我原本以为这是一件容易的事,但你知道他们说的是什么,没有什么比这更容易了.

我用过NuGet来:

  • 下载NLog版本2.0.1.2.
  • 在版本2.0.0下载Common.Logging.NLog.
  • 在版本2.1.2下载Common.Logging.NLog20.
  • 使用NuGet更新了从2.0.0版到2.1.2版的通用日志记录.

在app.config文件中我有:

<common>
    <logging>
        <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog">
            <arg key="configType" value="FILE" />
            <arg key="configFile" value="~/NLog.config" />
        </factoryAdapter>
    </logging>
</common>
Run Code Online (Sandbox Code Playgroud)

......而且......

  <dependentAssembly>
    <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我收到一个错误说明

'在类型'NameSpace.Shell.AppBootstrapper'上调用与指定绑定约束匹配的构造函数引发了异常.行号'8'和行位置'18'.

内在的例外是:

{"无法加载一个或多个请求的类型.请检索LoaderExceptions属性以获取更多信息."}

说Loader异常,只有一个,是:

{"无法从程序集'NLog加载类型'NLog.TargetWithLayout',Version = 2.0.1.0,Culture = neutral,PublicKeyToken = 5120e14c03d0593c'.":"NLog.TargetWithLayout"}

有没有人克服这个问题或有解决方法NLog working with Common.Logging

为了不发布长期问题,我没有包含该NLog.config文件,但我可以,如果这将是有益的.

c# nlog common.logging

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

LogManager.configuration为null

我已经使用nuget将NLog添加到项目中并添加了NLog.config.我正在运行调试器并得到一个NullReferenceException由于事实LogManager.Configuration是null:

LogManager.Configuration.AddTarget("sentinel", sentinalTarget);

这行代码在静态构造函数中运行.

  • NLog.config位于web.config旁边的项目根目录中.
  • 这发生在visual studio调试器中
  • NLog.config属性"复制到输出目录"="始终复制"
  • 我更新了NLog.config throwExceptions ="true",并且在运行时LogManager.ThrowExceptions是假的,所以我怀疑配置有问题
  • 尝试删除名称为:viewer,DbWin及其相关规则的目标

NLog.config内容:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      throwExceptions="false">

  <variable name="appName" value="YourAppName" />

  <targets async="true">
    <target xsi:type="File"
            name="default"
            layout="${longdate} - ${level:uppercase=true}: ${message}${onexception:${newline}EXCEPTION\: ${exception:format=ToString}}"
            fileName="${specialfolder:ApplicationData}\${appName}\Debug.log"
            keepFileOpen="false"
            archiveFileName="${specialfolder:ApplicationData}\${appName}\Debug_${shortdate}.{##}.log"
            archiveNumbering="Sequence"
            archiveEvery="Day"
            maxArchiveFiles="30"
            />

    <target xsi:type="EventLog"
            name="eventlog"
            source="${appName}"
            layout="${message}${newline}${exception:format=ToString}"/>

    <target xsi:type="NLogViewer"
            name="viewer"
            address="udp://127.0.0.1:9999"/>

    <target xsi:type="OutputDebugString" name="DbWin" layout="Log4JXmlEventLayout">
      <layout xsi:type="Log4JXmlEventLayout" />
    </target>
  </targets>
  <rules>
    <logger name="*" writeTo="default" minlevel="Info" />
    <logger name="*" writeTo="eventlog" minlevel="Error" />
    <logger name="*" …
Run Code Online (Sandbox Code Playgroud)

c# nlog

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

使用NLog处理错误并尝试捕获

我使用NLog在我的操作中记录错误以存储包含其他信息的错误,例如:

using NLog;

private static Logger _logger = LogManager.GetCurrentClassLogger();

public virtual ActionResult Edit(Client client)
{
  try
  {
        // FORCE ERROR
        var x = 0;

        x /= x;

        return RedirectToAction(MVC.Client.Index());
  }
  catch (Exception e)
  {
    _logger.Error("[Error in ClientController.Edit - id: " + client.Id + " - Error: " + e.Message + "]");
  }
}
Run Code Online (Sandbox Code Playgroud)

我在Web.config中配置了错误处理:

<customErrors mode="On" />
Run Code Online (Sandbox Code Playgroud)

但是当我执行Action(页面保留在同一个地方)时,我没有被重定向到Error.cshtml,为什么?

我可以用Elmah做同样的事情吗?(记录客户端ID等附加信息)

c# error-handling asp.net-mvc elmah nlog

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