GVKun编程网logo

TList TObjectList的区别和使用(tolist和to_list)

9

如果您对TListTObjectList的区别和使用和tolist和to_list感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解TListTObjectList的区别和使用的各种细节,并对to

如果您对TList TObjectList的区别和使用tolist和to_list感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解TList TObjectList的区别和使用的各种细节,并对tolist和to_list进行深入的分析,此外还有关于boto3 list_objects和list_objects_v2有什么区别?、c# – LINQ to Objects List的区别、c# – 添加到ObjectSet的对象的多态删除不会引发ObjectSet.IListSource.GetList()上的IBindingList.ListChanged、class – TObjectList <>获取项错误的实用技巧。

本文目录一览:

TList TObjectList的区别和使用(tolist和to_list)

TList TObjectList的区别和使用(tolist和to_list)

总结

以上是小编为你收集整理的TList TObjectList的区别和使用全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

boto3 list_objects和list_objects_v2有什么区别?

boto3 list_objects和list_objects_v2有什么区别?

我正在尝试使用python在Amazon s3存储桶中列出对象boto3

似乎boto3有2个函数可以列出存储桶中的对象:list_objects()list_objects_v2()

两者之间有什么区别,使用一个相比另一个有什么好处?

答案1

小编典典

并排比较。

list_objects():

response = client.list_objects(    Bucket=''string'',    Delimiter=''string'',    EncodingType=''url'',    #Marker to list continuous page    Marker=''string'',    MaxKeys=123,    Prefix=''string'')

list_objects_v2()

response = client.list_objects_v2(    Bucket=''string'',    Delimiter=''string'',    EncodingType=''url'',    MaxKeys=123,    Prefix=''string'',    # Replace marker to list continuous page    ContinuationToken=''string'',    # set to True to fetch key owner info. Default is False.    FetchOwner=True|False,    # This is similar to the Marker in list_object()    StartAfter=''string'')

新增功能。由于每页列出1000个键的限制,使用标记符列出多个页面可能会让人头疼。从逻辑上讲,您需要跟踪成功处理的最后一个密钥。使用ContinuationToken,您不需要知道最后一个键,只需检查NextContinuationToken响应中是否存在。您可以生成并行处理来处理1000个键的乘数,而无需处理最后一个键以获取下一页。

c# – LINQ to Objects List的区别

c# – LINQ to Objects List的区别

我有两个EmailAddress通用列表,我想要一个简单的方法来获取List1中不在List2中的所有EmailAddress对象.

我正在考虑与Linq进行某种类型的左外连接,但我对如何设置它有点困惑.我也愿意接受更好的解决方案.

更新:我应该注意到这些是我的“EmailAddress”对象的自定义数据类型列表.

解决方法

大多数这些答案都不起作用,因为List1和List2中的项目在用户眼中可能相同,但实际上是对不同实例的引用(它们不是引用相等).

假设Address是EmailAddress的字符串属性,这里是左连接解决方​​案.

IEnumerable<EmailAddress> query = 
  from a1 in list1
  join a2 in list2 on a1.Address equals a2.Address into g
  from x in g.DefaultIfEmpty()
  where x == null
  select a1;

c# – 添加到ObjectSet的对象的多态删除不会引发ObjectSet.IListSource.GetList()上的IBindingList.ListChanged

c# – 添加到ObjectSet的对象的多态删除不会引发ObjectSet.IListSource.GetList()上的IBindingList.ListChanged

概览/描述

简单:从TEntity派生的运行时类型的对象的多态删除添加到ObjectSet< TEntity>不会在ObjectSet< TEntity> .IListSource.GetList()方法返回的IBindingList对象上引发IBindingList.ListChanged事件.

但是,在ListChanged事件上有效地通知删除运行时类型与TEntity匹配的实例.

为了澄清,在任何时候,对象都被有效地从底层集合或数据视图/存储中移除,但是当这些对象是严格从所使用的实际TEntity派生的类型的实例时,不会引发ListChanged事件以通知它们的移除.

对于集合的运行时多态性的适当数据绑定支持,这只是一个惊人的BUG.

REPLICATION

型号设置

>每种类型策略表.
>在Server 2012 Express上针对已着色的sql数据库映射和验证实体模型.

这是实体层次结构(伪UML):

FiascoEntityContext : ObjectContext
  + Foos : ObjectSet<Foo>

Foo : EntityObject
  + Id: Int32
  + Name: String

SpecialFoo : Foo
  + SpecialProperty: String

示范代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Data.Objects;

namespace FiascoEF {
    class Program {
        static void Main(string[] args) {
            using (FiascoEntityContext context = new FiascoEntityContext()) {
                //
                // add some foos
                //
                context.Foos.Addobject(new Foo { Name = "Foo1" });
                context.Foos.Addobject(new BetterFoo { Name = "BetterFoo1",SpecialProperty = "Something Special" });
                context.SaveChanges();
                //
                // show the contents
                //
                Console.WriteLine("Listing all foos:");
                foreach (var foo in context.Foos) {
                    Console.WriteLine("     Got {0}: Id={1} Name={2} (State={3})",foo,foo.Id,foo.Name,foo.EntityState);
                }
                //
                // attach handler for the ListChanged event of the IBindingList returned by context.Foos as IListSource
                // NOTE: have to do this here bacause SaveChanges() above will reset the internal IBindingList
                //
                var bindingList = (context.Foos as IListSource).GetList() as IBindingList;
                bindingList.ListChanged += new ListChangedEventHandler(bindingList_ListChanged);
                //
                // delete all foos and show state. expect the event handler above to be invoked.
                //
                Console.WriteLine("Deleting all foos:");
                foreach (var foo in context.Foos) {
                    context.Foos.DeleteObject(foo);
                    Console.WriteLine("     Deleted {0}: Id={1} Name={2} (State={3})",foo.EntityState);
                }
                context.SaveChanges();
            }
        }

        static void bindingList_ListChanged(object sender,ListChangedEventArgs e) {
            Console.WriteLine("     Event on {0}: {1}",sender,e.ListChangedType);
        }
    }
}

预期成绩

Listing all foos:
     Got FiascoEF.Foo: Id=257 Name=Foo1 (State=Unchanged)
     Got FiascoEF.BetterFoo: Id=258 Name=BetterFoo1 (State=Unchanged)
Deleting all foos:
     Event on System.Data.Objects.ObjectView`1[FiascoEF.Foo]: ItemDeleted
     Deleted FiascoEF.Foo: Id=257 Name=Foo1 (State=Deleted)
     Event on System.Data.Objects.ObjectView`1[FiascoEF.Foo]: ItemDeleted
     Deleted FiascoEF.BetterFoo: Id=258 Name=BetterFoo1 (State=Deleted)

实际结果

Listing all foos:
     Got FiascoEF.Foo: Id=257 Name=Foo1 (State=Unchanged)
     Got FiascoEF.BetterFoo: Id=258 Name=BetterFoo1 (State=Unchanged)
Deleting all foos:
     Event on System.Data.Objects.ObjectView`1[FiascoEF.Foo]: ItemDeleted
     Deleted FiascoEF.Foo: Id=257 Name=Foo1 (State=Deleted)
     Deleted FiascoEF.BetterFoo: Id=258 Name=BetterFoo1 (State=Deleted)

研究

通过反射器发现返回的实际IBindingList是ObjectView< TElement>类型,并且此类型将删除操作委托给内部IObjectViewData< TElement>.为该接口找到的实现是ObjectViewQueryResultData< TElement>它定义:

public ListChangedEventArgs OnCollectionChanged(object sender,CollectionChangeEventArgs e,ObjectViewListener listener) {

    ListChangedEventArgs changeArgs = null;

    if (e.Element.GetType().IsAssignableFrom(typeof(TElement)) && _bindingList.Contains((TElement) (e.Element))) {
        ...
        changeArgs = new ListChangedEventArgs(ListChangedType.ItemDeleted,...);
        ...
    }

    return changeArgs;
}

支票:

if (e.Element.GetType().IsAssignableFrom(typeof(TElement)) && ...) { ... }

似乎是假的…可能以下是有意的吗?

if (typeof(TElement).IsAssignableFrom(e.Element.GetType()) && ...) { ... }

解决方法

很公平,bug报告给微软 – http://connect.microsoft.com/VisualStudio/feedback/details/749368 ……他们似乎已经承认了这个问题,但目前还不清楚他们会做什么.

记住,我们正在谈论由ObjectSet< T>检索的IBindingList实现.当出于数据绑定的目的被视为IListSource时,预期事件将被触发,就像它对同类列表的情况一样.

我通过定义一个继承自ObservableCollection< T>的类来解决这个问题.并且包装ObjectSet< T>,然后在DbExtensions.ToBindingList< T>(此ObservableCollection< T>)扩展方法的帮助下实现IListSource.

或者,我可以继续完全开始使用DbContext API,但是定义我自己的ObservableCollection< T>允许我现在继续使用ObjectContext,这就是我想要的.

class – TObjectList <>获取项错误

class – TObjectList <>获取项错误

我正在尝试在Delphi XE8中创建TObjectList类,但是当我尝试获取值时,我会收到错误.

compiler error message: “[dcc32 Error] : can’t access to private symbol {System.Generics.Collections}TList.GetItem”

这是我的代码:

unit Unit2;
interface
uses
  Classes,System.SysUtils,System.Types,REST.Types,System.JSON,Data.Bind.Components,System.RegularExpressions,System.Variants,Generics.Collections;

  type
  TTruc = class
  public
    libelle : string;
    constructor Create(pLibelle : string);
  end;

  TListeDeTrucs = class(TObjectList<TTruc>)
  private
    function GetItem(Index: Integer): TTruc;
    procedure SetItem(Index: Integer; const Value: TTruc);
  public
    function Add(AObject: TTruc): Integer;
    procedure Insert(Index: Integer; AObject: TTruc);
    procedure Delete(Index: Integer);
    property Items[Index: Integer]: TTruc read GetItem write SetItem; default;
  end;

implementation

{ TTruc }

constructor TTruc.Create(pLibelle: string);
begin
  libelle := pLibelle;
end;

{ TListeDeTrucs }

function TListeDeTrucs.Add(AObject: TTruc): Integer;
begin
  result := inherited Add(AObject);
end;

procedure TListeDeTrucs.Insert(Index: Integer; AObject: TTruc);
begin
  inherited Insert(index,AObject);
end;

procedure TListeDeTrucs.Delete(Index: Integer);
begin
  inherited delete(index);
end;

function TListeDeTrucs.GetItem(Index: Integer): TTruc;
begin
  result := inherited GetItem(index);
end;

procedure TListeDeTrucs.SetItem(Index: Integer; const Value: TTruc);
begin
  inherited setItem(index,value);
end;
end.

测试代码是:

procedure TForm1.Button1Click(Sender: TObject);
var
  l : TListeDeTrucs;
  i : integer;
  Obj : TTruc;
begin
  l := TListeDeTrucs.Create(true);
  l.Add(TTruc.Create('one'));
  l.Add(TTruc.Create('two'));
  Obj := TTruc.Create('three');
  l.Add(Obj);
  for i := 0 to l.count - 1 do
  begin
    showMessage(l[i].libelle);
  end;
  L.Delete(0);
  l.extract(Obj);
  l.Free;
end;

我怎样才能使它工作?

解决方法

好吧,GetItem,实际上SetItem是私有的.您的代码无法看到它们.私人成员只能在宣布他们的单位中看到.您需要使用至少受到保护的成员.

这编译:

function TListeDeTrucs.GetItem(Index: Integer): TTruc;
begin
  Result := inherited Items[Index];
end;

procedure TListeDeTrucs.SetItem(Index: Integer; const Value: TTruc);
begin
  inherited Items[Index] := Value;
end;

在这种情况下,您的类有点无意义,因为您的类中的所有方法都不会改变基类的行为.但是,你真正的班级做得更多.

今天的关于TList TObjectList的区别和使用tolist和to_list的分享已经结束,谢谢您的关注,如果想了解更多关于boto3 list_objects和list_objects_v2有什么区别?、c# – LINQ to Objects List的区别、c# – 添加到ObjectSet的对象的多态删除不会引发ObjectSet.IListSource.GetList()上的IBindingList.ListChanged、class – TObjectList <>获取项错误的相关知识,请在本站进行查询。

本文标签: