質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

452閲覧

UWPでカスタム属性を作成したい。

firstlast

総合スコア138

UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/12/14 04:40

編集2018/12/25 06:49

前提・実現したいこと

Visual Studio 2017のC#で、UWPでカスタム属性を作成したい。
学習用のプログラムを作って実行してみましたが、エラーが発生し実行できません。
下にソースコードを載せておきます。
よろしくお願います。

###エラー
CS0117 'Attribute' に 'GetCustomAttribute' の定義がありません

###調べたこと
”UWP カスタム属性”や”UWP 属性”でGoogle検索しましたが、該当するものを見つけることができませんでした。

該当のソースコード

MainPage.xaml.cs

C#

1using System; 2using Windows.UI.Popups; 3using Windows.UI.Xaml; 4using Windows.UI.Xaml.Controls; 5 6// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください 7 8namespace App1 9{ 10 /// <summary> 11 /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。 12 /// </summary> 13 public sealed partial class MainPage : Page 14 { 15 public MainPage() 16 { 17 this.InitializeComponent(); 18 } 19 20 //----------追加した部分-------------------ここから----------------- 21 class Test2Attribute : Attribute 22 { 23 private string val; 24 25 public Test2Attribute(string v) 26 { 27 val = v; 28 } 29 30 public string Value 31 { 32 get { return val; } 33 } 34 } 35 36 //属性適用 37 [Test2("あああ")] 38 public class TestClass 39 { 40 } 41 42 private async void Button_Click(object sender, RoutedEventArgs e) 43 { 44 //属性取得 ↓↓↓↓↓↓↓↓↓↓↓↓ここでエラー発生↓↓↓↓↓↓↓↓↓↓ 45 var att = (Test2Attribute)Attribute.GetCustomAttribute(typeof(TestClass), typeof(Test2Attribute)); 46 47 await new MessageDialog(att.Value).ShowAsync(); 48 } 49 //-----------------------------ここまで----------------------------------- 50 51 } 52}

MainPage.xaml

C#

1<Page 2 x:Class="App1.MainPage" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:local="using:App1" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 mc:Ignorable="d" 9 Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 10 11 <Grid> 12 <Button Content="Button" HorizontalAlignment="Left" Height="109" Margin="299,284,0,0" VerticalAlignment="Top" Width="220" Click="Button_Click"/> 13 14 </Grid> 15</Page>

開発環境

Microsoft Windows 10 Home (Version 10.0.17134 Build 17134)
Microsoft Visual Studio Community 2017 (Version 15.9.2)
Microsoft.NET Framework (Version 4.7.03056)

###追記
GetCustomAttributeのありか
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/12/23 00:05

かなり前に回答しました。できたかできなかったかくらい言ったらどうですか?
firstlast

2018/12/23 05:47

すみませんでした。回答が付いているのに先程気が付きました。なんども確認したつもりだったのに...以後気を付けます。
firstlast

2018/12/23 05:56

返答が大変遅くなり申し訳ございません。m(_ _)m 質問の翌日に回答して頂いたのにも関わらず2週間近くも返答がない状態にしてしまい、反省しています。
guest

回答1

0

ベストアンサー

Attribute にキャレットを当てて F12 を押してください。.NET Core の System.Attribute の宣言にジャンプできますが、そこに GetCustomAttribute というメソッドは宣言されていません。
.NET Framework にはありますので、それをご覧になったのだと思います。
.NET Core でカスタム属性を取得するには次のようにします。

C#

1using System.Reflection;

C#

1typeof(TestClass) 2 .GetTypeInfo() 3 .GetCustomAttribute<Test2Attribute>();

.NET Core と .NET Framework は別物です。情報を探すときには、それがどちらの情報なのかをしっかりと区別して読んでください。

#追記

Attribute Class

一部訂正です。
.NET Core 2.2 にはありました。
UWP が特別のようです。

Assemblies:

System.Runtime.dll, mscorlib.dll, netstandard.dll

これらのアセンブリが参照できるなら使えると思います。

投稿2018/12/14 22:32

編集2018/12/14 22:58
Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

firstlast

2018/12/23 05:59 編集

ありがとうございます。Zuishinさんの回答で問題解決です。
firstlast

2018/12/23 06:17

おっしゃる通り、ソースコードは.NETのものを流用したものでした。 また、.NET Frameworkと.NET Coreは別物だということを再認識できました。System.Runtime.dll, mscorlib.dll, netstandard.dllについても調べてみようと思います。
firstlast

2018/12/25 07:33

>.NET Core 2.2 にはありました。 調べていただきありがとうございます。 .NET Core(System.Runtime.dll)にある名前空間が、.NET Coreの一部であるUWPにはないのは不自然ですよね。 .NET Standard 2.0の時点でSystem.Attribute名前空間がUWPにないのは、マイクロソフトの対応が遅いだけと見ました。 (独り言) 2.2の名前空間ってどうやって調べたのかな... Visual Studio 2017 Communityには、2.0までしか入ってないし、 https://docs.microsoft.com/ja-jp/dotnet/api/system.attribute.getcustomattribute?view=netstandard-2.0 には2.0までしか載ってないし... もしかしてVisual Studio 2019...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問