小编And*_*ndi的帖子

Gradle - 将单个文件添加到JAR

我在项目的根目录中有"license.txt"文件.在jar-task中,我想将此文件添加到JAR文件的(根文件夹)中.

我试过了

jar {
  from '.' include 'license.txt'
}
Run Code Online (Sandbox Code Playgroud)

但这会替换其他内容(.class文件)而不是添加文件.我不想将license.txt添加到resources文件夹,因为我不想仅仅因为构建工具而改变我的项目结构.

谁可以帮忙?谢谢!

jar file task include gradle

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

在 C# 9 记录上使用“with”时忽略特定字段?

record使用with关键字创建 C# 9 的新实例时,我想忽略某些字段,而不是将它们也复制到新实例中。

在以下示例中,我有一个Hash属性。因为它在计算上非常昂贵,所以它只在需要时才计算然后缓存(我有一个非常不可变的记录,所以对于一个实例,哈希永远不会改变)。

public record MyRecord {

   // All truely immutable properties
   public int ThisAndManyMoreComplicatedProperties { get; init; } 
   // ...

   // Compute only when required, but then cache it
   public string Hash {
      get {
         if (hash == null)
            hash = ComputeHash();
         return hash;
      }
   }

   private string? hash = null;
}
Run Code Online (Sandbox Code Playgroud)

打电话时

MyRecord myRecord = ...;
var changedRecord = myRecord with { AnyProp = ... };
Run Code Online (Sandbox Code Playgroud)

changedRecord包含hash值 from …

c# c#-9.0 c#-record-type

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

确定 .NET Core 应用程序中的运行时目标 (OS)

dotnet publish -r win10-x64我的 .NET Core 3.0 应用程序是使用命令或dotnet publish -r ubuntu.18.04-x64例如针对不同操作系统发布的。

在运行时,在我的 C# 代码中,我想找出应用程序构建的目标。我指的不仅仅是一般操作系统,如 Windows 或 Linux(如此处所问,而是确切的运行时目标,如ubuntu-18.04-x64.

我已经发现,有一个文件<AssemblyName>.deps.json。它包含属性"runtimeTarget": { "name": ".NETCoreApp,Version=v3.0/ubuntu.18.04-x64", ...,但也许有更好的方法?

c# .net-core

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

记录在可枚举相等性上返回 false

测试新的 C# 9 记录,并希望澄清为什么序列相等在记录上不起作用?

假设我有以下代码:

public record Person(string FirstName, string LastName);
Run Code Online (Sandbox Code Playgroud)

以下代码将返回 true 表示相等(这里没什么奇怪的):

var first = new Person("Bruce", "Wayne");
var second = new Person("Bruce", "Wayne");
var result = first == second; // Returns true
Run Code Online (Sandbox Code Playgroud)

但是,如果我创建以下记录:

public record Basket(string[] Items);
Run Code Online (Sandbox Code Playgroud)

我做了一个类似的测试:

var first = new Basket(new[] { "Banana", "Apple" });
var second = new Basket(new[] { "Banana", "Apple" });
var result = first == second;
Run Code Online (Sandbox Code Playgroud)

结果将返回 false。这可以通过定义自己的 Equals 方法来解决:

public record Basket(string[] Items)
{
    public virtual bool Equals(Basket other)
    { …
Run Code Online (Sandbox Code Playgroud)

c# c#-9.0 c#-record-type

7
推荐指数
0
解决办法
3441
查看次数

从实现类调用C#接口默认方法

C#8支持接口中的默认方法实现。我的想法是将一个日志记录方法注入这样的类中:

public interface ILoggable {
    void Log(string message) => DoSomethingWith(message);
}

public class MyClass : ILoggable {
    void MyMethod() {
        Log("Using injected logging"); // COMPILER ERROR
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个编译器错误:“名称在当前上下文中不存在”

以这种方式使用默认方法实现是不可能的吗?

编辑:

有关C#规则的正确答案,请参见接受的答案。有关更简洁的解决方案(我的问题的初衷!),请参阅下面的答案

c# c#-8.0 default-interface-member

6
推荐指数
4
解决办法
400
查看次数

JavaFX FileChooser 和 DirectoryChooser:附属组件

Swing 的 JFileChooser 提供了setAccessory方法来扩展任何 Swing 组件的文件选择器,例如用于文件预览或选择选项。

JavaFX 的FileChooserDirectoryChooser 中是否有类似的可能性?

java javafx filechooser

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

Cloud Firestore:按字段内容查询受保护的文档

编辑:似乎是Firestore中的一个开放问题.另见这篇文章.

在Google Cloud Firestore中,我想为groups 的集合建模.每个组包含一个name,它的列表user和一些secretGroupData.对我来说,这样做的自然方式是:

/groups
    /group1 {
        name: "Group 1"
        users: { //object can be queried, simple array not
          "user1": true,
          "user5": true
        }
        secretGroupData: ...
      }
    /group2 { ... }
Run Code Online (Sandbox Code Playgroud)

鉴于用户喜欢user1,我想查询他所属的所有群组.此查询工作正常:

groupsRef.where("users.user1", "==", true)
Run Code Online (Sandbox Code Playgroud)

但是,我想保护组数据.只有所有用户都可以读取所有组时,此查询才有效.当我通过规则保护组只能由组成员可读时

match /groups/{groupId} {
    allow read: if resource.data.users[request.auth.uid] == true;
}
Run Code Online (Sandbox Code Playgroud)

上述查询不再起作用,因为只要它看到当前用户不是其成员的组,就会拒绝读访问,并且整个查询都会失败.

Firestore中此问题的最佳解决方案是什么?我是不是该

  1. 告诉Firestore只返回允许的groups并忽略其他的,而不是抛出错误?如果是这样,我怎么能做到这一点?
  2. 使group所有users 的s可读并移入secretGroupData子集合,然后我可以限制对组成员的访问
  3. 通过将用户的所有组的ID添加到用户的配置文件文档(/users/user1/groupIds: ["group1"])中来添加冗余,因此我事先知道这些组并可以通过ID查询它们 …

firebase firebase-security google-cloud-firestore

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

从Ionic 4警报的输入中获取价值

到目前为止,有关离子警报的Ionic 4文档包含一个示例如何向警报添加文本输入,例如:

const alert = await this.alertController.create({
  inputs: [
    {
      name: 'name1',
      type: 'text'
    },
Run Code Online (Sandbox Code Playgroud)

但是我找不到如何从name1文本输入中访问值的方法,例如在按钮处理程序中。

我是否必须使用类似的东西,document.getElementById还是有其他的离子/角度样式方式?

ionic4

4
推荐指数
2
解决办法
4268
查看次数

C# 不可为空的字段:Lateinit?

我想知道如何在带有可为空引用类型的C# 中使用后期初始化的类字段。想象一下下面的类:

public class PdfCreator { 

   private PdfDoc doc;

   public void Create(FileInfo outputFile) {
       doc = new PdfWriter(outputFile);
       Start();
   }

   public void Create(MemoryStream stream) {
       doc = new PdfWriter(stream);
       Start();
   }

   private void Start() {
      Method1();
      // ...
      MethodN();
   }

   private void Method1() {
      // Work with doc
   }

   // ...

   private void MethodN() {
      // Work with doc
   }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码非常简化。我真正的班级使用了更多的领域,比如doc,还有一些带有一些参数的构造函数。

使用上面的代码,我在构造函数上收到编译器警告,doc未初始化,这是正确的。我可以通过设置docto的类型来解决这个问题PdfDoc?,但是我必须使用?.!.任何它的地方,这很糟糕。

我也可以 …

c# nullable-reference-types lateinit

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